R 向ggplot2图例添加条形图

R 向ggplot2图例添加条形图,r,ggplot2,R,Ggplot2,我有以下数据帧: my.df = data.frame(mean = c(0.045729661,0.030416531,0.043202944,0.025600973,0.040526913,0.046167044,0.029352414,0.021477789,0.027580529,0.017614864,0.020324659,0.027547972,0.0268722,0.030804717,0.021502093,0.008342398,0.02295506,0.022386184,

我有以下
数据帧

my.df = data.frame(mean = c(0.045729661,0.030416531,0.043202944,0.025600973,0.040526913,0.046167044,0.029352414,0.021477789,0.027580529,0.017614864,0.020324659,0.027547972,0.0268722,0.030804717,0.021502093,0.008342398,0.02295506,0.022386184,0.030849534,0.017291356,0.030957321,0.01871551,0.016945678,0.014143042,0.026686185,0.020877973,0.028612298,0.013227244,0.010710895,0.024460647,0.03704981,0.019832982,0.031858501,0.022194059,0.030575241,0.024632496,0.040815748,0.025595652,0.023839083,0.026474704,0.033000706,0.044125751,0.02714219,0.025724641,0.020767752,0.026480009,0.016794441,0.00709195), std.dev = c(0.007455271,0.006120299,0.008243454,0.005552582,0.006871527,0.008920899,0.007137174,0.00582671,0.007439398,0.005265133,0.006180637,0.008312494,0.006628951,0.005956211,0.008532386,0.00613411,0.005741645,0.005876588,0.006640122,0.005339993,0.008842722,0.006246828,0.005532832,0.005594483,0.007268493,0.006634795,0.008287031,0.00588119,0.004479003,0.006333063,0.00803285,0.006226441,0.009681048,0.006457784,0.006045368,0.006293256,0.008062195,0.00857954,0.008160441,0.006830088,0.008095485,0.006665062,0.007437581,0.008599525,0.008242957,0.006379928,0.007168385,0.004643819), parent.origin = c("paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal"), group = c("F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F"), replicate = c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6))
为此,我使用以下代码生成ggplot:

p1 = ggplot(data = my.df, aes(factor(replicate), color = factor(parent.origin)))
p1 = p1 + geom_boxplot(aes(fill = factor(parent.origin),lower = mean - std.dev, upper = mean + std.dev, middle = mean, ymin = mean - 3*std.dev, ymax = mean + 3*std.dev), position = position_dodge(width = 0), width = 0.5, alpha = 0.5, stat="identity") + facet_wrap(~group, ncol = 4)+scale_fill_manual(values = c("red","blue"),labels = c("maternal","paternal"),name = "parental allele")+scale_colour_manual(values = c("red","blue"),labels = c("maternal","paternal"),name = "parental allele")

现在我想添加这个data.frame,它给出了以下条形图:

bar.df = data.frame(bar=c("paternal.fraction","maternal.fraction","parental.effect","cross.effect","gender.effect"),vals=c(0.4,0.6,0.82,0.91,0.77))

#order bars and specify colors
bar.df$ord = factor(bar.df$bar,as.character(bar.df$bar))
cols = c(paterna="blue",maternal="red",parental="purple",cross="gray40",gender="gray70")

bar.p = ggplot(bar.df, aes(y=vals))+geom_bar(aes(x=ord),data=bar.df,stat="identity",fill=cols)+labs(x="",y="")

位于原始地块(带有“亲本等位基因”标题的地块)图例下方的小地块


有什么想法吗?

可能不优雅,但你可以试试这个

library(grid)
条形图的最小调整

bar.p = ggplot(bar.df, aes(y=vals))+
  geom_bar(aes(x=ord),data=bar.df,stat="identity",fill=cols)+
  labs(x="",y="") + theme_bw() +
  theme(axis.text.x = element_text(angle = 90),
        axis.text.y = element_blank(),
        plot.margin=unit(c(0,0,0,0),"mm"))

print(p1)
subvp = viewport(width = 0.15, height = 0.3, x = 0.9, y = 0.2)
print(bar.p, vp = subvp)


调整bar.p布局以获得更好的结果。这不是最好的。

下面是一个简单的方法:

my.df = data.frame(mean = c(0.045729661,0.030416531,0.043202944,0.025600973,0.040526913,0.046167044,0.029352414,0.021477789,0.027580529,0.017614864,0.020324659,0.027547972,0.0268722,0.030804717,0.021502093,0.008342398,0.02295506,0.022386184,0.030849534,0.017291356,0.030957321,0.01871551,0.016945678,0.014143042,0.026686185,0.020877973,0.028612298,0.013227244,0.010710895,0.024460647,0.03704981,0.019832982,0.031858501,0.022194059,0.030575241,0.024632496,0.040815748,0.025595652,0.023839083,0.026474704,0.033000706,0.044125751,0.02714219,0.025724641,0.020767752,0.026480009,0.016794441,0.00709195), std.dev = c(0.007455271,0.006120299,0.008243454,0.005552582,0.006871527,0.008920899,0.007137174,0.00582671,0.007439398,0.005265133,0.006180637,0.008312494,0.006628951,0.005956211,0.008532386,0.00613411,0.005741645,0.005876588,0.006640122,0.005339993,0.008842722,0.006246828,0.005532832,0.005594483,0.007268493,0.006634795,0.008287031,0.00588119,0.004479003,0.006333063,0.00803285,0.006226441,0.009681048,0.006457784,0.006045368,0.006293256,0.008062195,0.00857954,0.008160441,0.006830088,0.008095485,0.006665062,0.007437581,0.008599525,0.008242957,0.006379928,0.007168385,0.004643819), parent.origin = c("paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal","maternal","maternal","maternal","maternal","maternal","maternal","paternal","paternal","paternal","paternal","paternal","paternal"), group = c("F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:M","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1r:F","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:M","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F","F1i:F"), replicate = c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6))

library(ggplot2)
p1 = ggplot(data = my.df, aes(factor(replicate), color = factor(parent.origin)))
p1 = p1 + geom_boxplot(aes(fill = factor(parent.origin),lower = mean - std.dev, upper = mean + std.dev, middle = mean, ymin = mean - 3*std.dev, ymax = mean + 3*std.dev), position = position_dodge(width = 0), width = 0.5, alpha = 0.5, stat="identity") + facet_wrap(~group, ncol = 4)+scale_fill_manual(values = c("red","blue"),labels = c("maternal","paternal"),name = "parental allele")+scale_colour_manual(values = c("red","blue"),labels = c("maternal","paternal"),name = "parental allele")

library(grid)
bar.df = data.frame(bar=c("paternal.fraction","maternal.fraction","parental.effect","cross.effect","gender.effect"),vals=c(0.4,0.6,0.82,0.91,0.77))
#order bars and specify colors
bar.df$ord = factor(bar.df$bar,as.character(bar.df$bar))
#specify bar colors
cols = c(paterna="blue",maternal="red",parental="purple",cross="gray40",gender="gray70")
bar.p = ggplot(bar.df, aes(y=vals))+geom_bar(aes(x=ord),data=bar.df,stat="identity",fill=cols)+labs(x="",y="") +theme(axis.text.x = element_text(angle = 90),plot.margin=unit(c(2,2,2,2),"mm"))

library(gridExtra)
g_legend <- function(a.gplot){
            tmp <- ggplot_gtable(ggplot_build(a.gplot))
            leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
            legend <- tmp$grobs[[leg]]
            return(legend)
    }
bar.p.grob=ggplotGrob(bar.p)
p2 = arrangeGrob(p1 + theme(legend.position = "none"),widths=c(3/4, 1/4),arrangeGrob(g_legend(p1),bar.p.grob), ncol = 2)
my.df=data.frame(平均值=c(0.045729661,0.030416531,0.043202944,0.025600973,0.040526913,0.046167044,0.029352414,0.021477789,0.027580529,0.017614864,0.020324659,0.027547972,0.0268722,0.030804717,0.021502093,0.008342398,0.02295506,0.022386184,0.030849534,0.017291356,0.030957321,0.01871551,0.016945678,0.014143042,0.026686185,0.020877973,0.028612298,0.013227244,0.010710895,0.024460647,0.03704981,0.019832982,0.031858501,0.022194059,0.030575241,0.024632496,0.0408157448,0.025595652,0.023839083,0.026474704,0.033000706,0.044125751,0.02714219,0.025724641,0.0207677752,0.026480009,0.016794441,0.00709195),标准差=c(0.007455271,0.006120299,0.008243454,0.005552582,0.006871527,0.008920899,0.007137174,0.00582671,0.007439398,0.005265133,0.006180637,0.008312494,0.006628951,0.005956211,0.008532386,0.00613411,0.005741645,0.005876588,0.006640122,0.005339993,0.008842722,0.006246828,0.005532832,0.005594483,0.007268493,0.006634795,0.008287031,0.00588119,0.004479003,0.006333063,0.00803285,0.006226441,0.009681048,0.006457784,0.006045368,0.006293256,0.008062195,0.00857954,0.008160441,0.006830088,0.008095485,0.006665062,0.007437581,0.008599525,0.008242957,0.006379928,0.007168385,0.004643819),亲本=c(“父系”、“父系”、“父系”、“父系”、“父系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”、“母系”,“母亲的”、“母亲的”、“母亲的”、“父亲的”、“父亲的”、“父亲的”、“父亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“父亲的”、“父亲的”、“父亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“母亲的”、“父亲的”、“父亲的”、“父亲的”母的、母的、父的、父的、父的、父的、父的),组=c(F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:M、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1r:F、F1i:M、F1i:M、F1i:M、F1i:M、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:M、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:M、F1i:M、F1i:M、F1i:M、F1i:M、F1i:M、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:M、F1i:F、F1i:F、F1i:F、F1i:F、F1i:F、F1i:M、F1i:F、F1i
图书馆(GG2)
p1=ggplot(数据=my.df,aes(因子(复制),颜色=因子(父.origin)))
p1=p1+geom_箱线图(aes(填充=因子(父源),下=平均值-std.dev,上=平均值+std.dev,中=平均值,ymin=平均值-3*std.dev,ymax=平均值+3*std.dev),位置=位置闪避(宽度=0),宽度=0.5,α=0.5,stat=“identity”)+facet_包裹(~group,ncol=4)+刻度填充手册(值=c(“红色”,“蓝色”),标签=c(“母性”)父系“),name=“亲本等位基因”)+量表颜色手册(值=c(“红色”、“蓝色”),标签=c(“母系”、“父系”)、name=“亲本等位基因”)
图书馆(网格)
bar.df=data.frame(bar=c(“父系分数”、“母系分数”、“亲本效应”、“交叉效应”、“性别效应”),VAL=c(0.4,0.6,0.82,0.91,0.77))
#排序栏并指定颜色
bar.df$ord=因子(bar.df$bar,as.character(bar.df$bar))
#指定条颜色
cols=c(paterna=“蓝色”,motheral=“红色”,parent=“紫色”,cross=“灰色40”,gender=“灰色70”)
bar.p=ggplot(bar.df,aes(y=vals))+geom_-bar(aes(x=ord),data=bar.df,stat=“identity”,fill=cols)+labs(x=“”,y=“”)+theme(axis.text.x=element_-text(angle=90),plot.margin=unit(c(2,2,2),“mm”))
图书馆(gridExtra)

g_legend最简单的方法是分别创建两个绘图,然后使用图像编辑软件将一个绘图粘贴到另一个绘图中。图例下方是什么意思?您是指“家长alelle”下方的小条形图吗"在第一张图的右边?是的carloscinelli-这正是我想做的。我还编辑了我的原始帖子。知道如何做到这一点吗?谢谢保罗。我想知道使用ggplot的grobs是否可以实现这一点?@user1701545我试过这个。使用
注释\u custom
ggplotGrob
将把条形图放进去每个方面。@PauloCardoso不幸的是,它不起作用,但是你可以用
p1+annotation\u custom(ggplotGrob(bar.p))
之类的东西将ggplot Grob“添加”到现有的绘图中。在这种情况下,它会将Grob添加到每个方面。@MatthewPlourde我还不知道如何管理Grob,但肯定会更有趣。