R可视化——ggplot2包中双y轴图形的绘制
科研那点事儿
2022年10月20日 11:01
收录于文集
共53篇

   此前,基于ggplot2包小编给大家展示过很多种图形的绘制,但是所有图形几乎都是单y轴类型的图形,今天小编给大家展示的是如何基于ggplot2包绘制一张双y轴坐标图。

加载R包及数据

1、加载R包

代码块
JavaScript
自动换行
复制代码
library(ggplot2)
library(ggprism)
复制成功

2、数据——随机生成作图数据

代码块
R
自动换行
复制代码
df<-data.frame(
  x=c(1:8),
  y1=c(1,5,6,8,10,12,15,17),
  y2=c(50,48,42,40,38,33,35,20))
head(df)
复制成功

常规图形的绘制

代码块
R
自动换行
复制代码
p1<-ggplot(df, aes(x = x, y = y1))+
  geom_line(color="red",size=1)
p2<-ggplot(df, aes(x = x, y = y2))+
  geom_line(color="green",size=1)
cowplot::plot_grid(p1,p2,ncol = 2)
复制成功

绘制双Y轴图形

   ggplot2包中绘制双Y轴折线图主要依靠sec.axis()函数实现,但是这个函数是允许在第一个Y轴基础上建立第二个Y轴,并不是重新建立独立的y轴,而且此函数设置时需要依据y1范围进行相应设置才能画出我们需要的图形:

代码块
R
自动换行
复制代码
ggplot(df, aes(x=x)) +
  geom_line(aes(y=y1),color="red",size=1)+
  geom_line(aes(y=y2/3),color="green",size=1)+#除以3得到与y1相同的刻度范围
  scale_y_continuous(name = "y1",#y1特征
                     sec.axis = sec_axis( trans=~.*3, name="y2"))#y2特征
复制成功

当然,我们也可以对其图形类型进行更改:

代码块
R
自动换行
复制代码
ggplot(df, aes(x=x)) +
  geom_bar(aes(y=y1), stat="identity", size=.1, fill=df$y1, color="black", alpha=.4)+
  geom_line(aes(y=y2/3),color="red",size=1.5,linetype = 2)+
  scale_y_continuous(name = "y1",
                     sec.axis = sec_axis( trans=~.*3, name="y2"))
复制成功

绘图模板代码

代码块
R
自动换行
复制代码
ggplot(df, aes(x=x)) +
  geom_bar(aes(y=y1,fill="y1"), stat="identity", size=.1, color="black")+
  geom_point(aes(y=y2/3,color="y2"),size=5,alpha=0.5)+
  scale_y_continuous(expand=c(0,0),name = "y1",
                     sec.axis = sec_axis( trans=~.*3, name="y2"))+
  theme_prism(palette = "candy_bright",
              base_fontface = "plain",
              base_family = "serif", 
              base_size = 16,
              base_line_size = 0.8,
              axis_text_angle = 45)+
  scale_fill_manual(values = "red")+
  scale_color_manual(values = "blue")
复制成功

参考:https://r-graph-gallery.com/line-chart-dual-Y-axis-ggplot2.html