r - ggplot2 直方图构面 - 仅包含每个构面图的相关条目

标签 r ggplot2 histogram facet

我想要完成的事情在概念上非常简单,但我找不到一种方法来做到这一点,除非我做两个不同的图并将它们与 grid.arrange 放在一起,这不是我首选的解决方案。 我有长度为 9 和长度 10 的条目的数据在图中进行分面,但我只希望长度为 9 的条目位于左侧,长度为 10 的条目位于右侧,而不是所有地方都有空直方图条。

MWE

library(reshape2)
library(ggplot2)
my.df <- data.frame(oligo=rep(c("NSSCMGSMNR","SSCMGSMNR","SSCMGSMNRR","VVGAGDVGK",
                                "VVGAVGVGK","VVVGAGDVGK","VVVGAVGVGK"), each=4), 
                    a11.a24=rep(c("-/-","+/-","-/+","+/+"), 7), 
                    a11=rep(c("-","+","-","+"), 7), a24=rep(c("-","-","+","+"), 7),
                    freq1=c(0,3,0,1,0,3,0,1,0,3,0,1,2,3,2,0,4,2,1,4,2,3,2,0,4,2,1,4), 
                    freq2=c(0,4,0,4,0,4,0,4,0,4,0,4,4,3,4,3,5,6,5,6,4,3,4,3,5,6,5,6), 
                    freq3=c(3,3,1,1,3,3,1,1,3,3,1,1,5,5,2,2,6,6,5,5,5,5,2,2,6,6,5,5), 
                    len=rep(c(10,9,10,9,9,10,10), each=4))
my.df <- with(my.df, my.df[order(my.df$len, my.df$freq1, decreasing=T),])
my.df.m <- melt(my.df, measure.vars=c('a11.a24', 'a11', 'a24'))
my.df.m$oligo <- factor(my.df.m$oligo, levels=unique(my.df.m$oligo))
ggplot(my.df.m, aes(x=oligo)) +
  facet_grid(variable~len, scales="free_y") +
  geom_histogram(data=subset(my.df.m, variable=='a11.a24'),
    aes(y=freq1, fill=value), stat="identity", position=position_dodge()) +
  geom_histogram(data=subset(my.df.m, variable=='a11'),
    aes(y=freq2, fill=value), stat="identity", position=position_dodge()) +
  geom_histogram(data=subset(my.df.m, variable=='a24'),
    aes(y=freq3, fill=value), stat="identity", position=position_dodge()) +
  ggtitle("Number of patients with a given oligo") +
  theme(axis.text.x=element_text(angle=45, hjust=1, size=7), 
        legend.title=element_blank(), legend.position="right", 
        legend.background=element_blank(), legend.box.just="left",
        plot.title=element_text(size=15, face="bold", colour="black", vjust=1.5)) +
  scale_y_continuous(name = "num. patients") +
  scale_x_discrete(name = "oligo")

产生: enter image description here

所有条目都在两个 X 轴上,与长度 10 对应的条在左侧为空,与长度 9 对应的条在右侧为空... 是否可以在左侧仅包含长度为 9 的条目,在右侧仅包含长度为 10 的条目?谢谢

生成的数字让我想到了关于条目顺序的另一个问题...为什么在构面中 9 排在 10 之前,但是当在每个 X 轴上排列条目时,长度为 10 的条目排在长度为 9 的条目之前??如果我想保留各处的所有条目,我怎样才能在各处获得正确的顺序(9 之前 10)?

请注意,该解决方案应该是通用的,这个示例只有长度 9 和 10,但我可以有长度 8、9、10 和 11 的任意组合...

最佳答案

将两个轴上的刻度更改为自由:

facet_grid(variable~len,scales="free")(而不是“free_y”)

对于第二个问题,条目被强制转换为因子向量,并且顺序恰好有长度为 10 的条目出现在长度 9 之前。您可以通过重新排序 oligo 中的级别来重新排序它们因素。

如果您想根据 len 列进行操作:

my.df.m$oligo = factor(my.df.m$oligo, 
                       levels(my.df.m$oligo)[unique(my.df.m$oligo[order(my.df.m$len)])])

关于r - ggplot2 直方图构面 - 仅包含每个构面图的相关条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27538641/

相关文章:

r - 逆矩阵中的误差

r - 如何知道 r 在幕后做什么

r - 如何解决geom_segment中的箭头在plotly下无法显示

r - 在 R 中扩展电子邮件数据集的标题

r - 同一 R 包中非导出函数的显式命名空间 - 最佳实践

R:连续 x 轴上的条形图(时间刻度)

python - 在python 3.6.3中安装ggp​​lot

c++ - equalizeHist 中的 opencv 内存泄漏?

c# - 直方图/柱形图不显示一直到底部的条形图

python - 绘制 dataFrame 中所有值的直方图