首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地将条形图和直线图重叠在一起

如何正确地将条形图和直线图重叠在一起
EN

Stack Overflow用户
提问于 2020-12-17 05:56:32
回答 1查看 103关注 0票数 0

我正在使用下面的代码

代码语言:javascript
复制
p <- ggplot() +
       geom_bar(data=filter(df, variable=="LA"), aes(x=Gen, y=Mean, fill=Leaf), 
       stat="identity", position="dodge")+
       geom_point(data=filter(df, variable=="TT"),aes(x=Gen, y=Mean, colour=Leaf))+
       geom_line(data=filter(df, variable=="TT"), aes(x=Gen, y=Mean, group=Leaf))+
       ggtitle("G")+xlab("Genotypes")+ylab("Canopy temperature")+
       scale_fill_hue(name="", labels=c("Leaf-1", "Leaf-2", "Leaf-3"))+ 
       scale_y_continuous(sec.axis=sec_axis(~./20, name="2nd Y-axis"))+
       theme(axis.text.x=element_text(angle=90, hjust=1), legend.position="top")

由上述代码生成的图形 我想要这样的图形

数据

代码语言:javascript
复制
https://docs.google.com/spreadsheets/d/1Fjmg-l0WTL7jhEqwwtC4RXY_9VQV9GOBliFq_3G1f8I/edit#gid=0

从数据中,我希望变量LA位于左侧,TT从右侧。

以上部分已解决,

现在,我试着在条形图上放错了下面的代码,它造成了一个错误,有人能看看解决方案吗?

代码语言:javascript
复制
p + geom_errorbar(aes(ymin=Mean-se, ymax=Mean+se), width=0.5,
        position=position_dodge(0.9), colour="black", size=.7)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-17 08:59:58

为此,您需要理解的是,即使您有第二个Y轴,它也只是一个标记,而在图形上绘制的所有内容仍然是基于主Y轴(左一个)。

所以你需要做两件事:

  1. 将任何应该引用第二个Y轴的值转换为左侧的标度,在本例中是最大为15的条形标度(LA变量),因此需要将TT的值除以20。
  2. 第二轴需要正确的标签,所以它将是主Y轴乘以20。
代码语言:javascript
复制
p <- ggplot() +
  geom_bar(data=filter(df, variable=="LA"), aes(x=Gen, y=Mean, fill=Leaf), 
    stat="identity", position="dodge") +
  # values are divided by 20 to be in the same value range of bar graph
  geom_point(data=filter(df, variable=="TT"),aes(x=Gen, y=Mean/20, colour=Leaf))+
  geom_line(data=filter(df, variable=="TT"), aes(x=Gen, y=Mean/20, group=Leaf))+
  ggtitle("G")+xlab("Genotypes")+ylab("Canopy temperature")+
  scale_fill_hue(name="", labels=c("Leaf-1", "Leaf-2", "Leaf-3"))+ 
  # second axis is multiply by 20 to reflect the actual value of lines & points
  scale_y_continuous(
    sec.axis=sec_axis(trans = ~ . * 20, name="2nd Y-axis",
      breaks = c(0, 100, 200, 300))) +
  theme(axis.text.x=element_text(angle=90, hjust=1), legend.position="top")

对于误差par,这是非常基本的。您将需要调整主题和图表,以有一个好看的一个。

代码语言:javascript
复制
p + geom_errorbar(data = filter(df, variable=="TT"),
   aes(x = Gen, y=Mean/20, ymin=(Mean-se)/20,
   ymax=(Mean+se)/20), width=0.5,                  
   position=position_dodge(0.9), colour="black", size=.7)

最后一个注意事项:请考虑阅读错误信息,理解它的意思,参考软件包的帮助文档,在R中使用函数,这样你就可以自己学习如何做所有的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65335375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档