使用geom_bar()叠加两个条形图

时间:2017-02-12 09:39:00

标签: r ggplot2 overlay errorbar

我试图将两个条形图叠加在一起,而不是旁边。 数据来自同一数据集。我希望x轴上的“阻止”和“开始”和“结束”作为重叠的条形图。

    Block   Start       End
1    P1L     76.80       0.0
2    P1S     68.87       4.4
3    P2L     74.00       0.0
4    P2S     74.28       3.9
5    P3L     82.22       7.7
6    P3S     80.82      17.9

我的脚本是

 ggplot(data=NULL,aes(x=Block))+
    geom_bar(data=my_data$Start,stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4')+
    geom_bar(data=my_data$End,stat="identity",position ="identity",alpha=.8,fill='pink',color='red')

我得到错误:ggplot2不知道如何处理类数字

的数据

我也试过

    ggplot(my_data,aes(x=Block,y=Start))+
      geom_bar(data=my_data$End, stat="identity",position="identity",...)

任何人都知道如何实现这一目标?谢谢。

编辑:

如何让闪避覆盖吧?

我编辑这篇文章,因为我的下一个问题是相关的,因为这是我原帖的相反问题。

@ P.merkle

我不得不将我的情节改为四个条形,显示标记为L和S的所有区块的平均值.L代表滨海,S代表Sublittoral。他们暴露于两种治疗:正常和减少。

我已计算出平均值及其标准偏差。 我需要四个条形图及其各自的误差条: 正常/沿海,减少/沿海,正常/亚光,减少/亚光。

问题是当我绘制它时,沿岸的条纹和两个sublittoral条都相互叠加!所以现在我希望他们重叠! 我怎样才能实现呢?我已经尝试了各种position = 'dodge'position = position_dodge(newdata$Force),但没有运气......

我的newdata包含以下信息:

Zonation Force N mean sd se 1 Litoral Normal 6 0.000000 0.000000 0.000000 2 Litoral Redusert 6 5.873333 3.562868 1.454535 3 Sublitoral Normal 6 7.280000 2.898903 1.183472 4 Sublitoral Redusert 6 21.461667 4.153535 1.695674

我的脚本是这样的:

ggplot(data=cdata,aes(x=newdata$Force,y=newdata$mean))+
        geom_bar(stat="identity",position ="dodge",
                 alpha=.4,fill='red', color='lightblue4',width = .6)+
        geom_errorbar(aes(ymin=newdata$mean-sd,ymax=newdata$mean+sd),
                      width=.2, position=position_dodge(.9))

遗憾的是this

从错误栏开始,它显然是四条,但它们重叠。请问,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

对您的问题有一个简单而复杂的答案。

如果您不需要图例,那么简单的解决方案可能对您有用。

如果您想在条形图旁边显示图例,请考虑使用更复杂的解决方案,这需要将数据从宽格式转换为长格式。

变式1:没有图例,以宽格式保存数据

您可以在个别地理位置(此处为<select id="first"> </select> <select id="second"> </select>)上优化您的美学规范:

geom_bar

plot without legend

变式2:通过将数据转换为长格式

来添加图例

要添加图例,请使用ggplot(data=my_data,aes(x=Block))+ geom_bar(aes(y=Start),stat="identity",position ="identity",alpha=.3,fill='lightblue',color='lightblue4') + geom_bar(aes(y=End),stat="identity",position ="identity",alpha=.8,fill='pink',color='red') 将数据框格从宽格式转换为长格式,从而为您提供reshape2::melt列(“开始”与“结束”)和{{ 1}}。然后使用variable列定义您的图例:

value

enter image description here