在带有两个y轴的条形图中并排

时间:2020-09-18 22:26:17

标签: r ggplot2

我试图将条形图并排放置,而不是将它们叠加在ggplot2中具有两个y轴的条形图中。我知道是否只有一个y轴,并且颜色是由一个因子给出的,我可以使用position_dodge,但不能在两个y轴上使用它。

这是我的数据:

structure(list(date = structure(1:3, .Label = c("2018-07-12", 
"2018-09-09", "2019-08-01"), class = "factor"), Maturity = c(0.35, 
0.02, NA), daphnia = c(0.0249, 0.0256, 0)), class = "data.frame", row.names = c(NA,
-3L))

这是我的图表:

library(ggplot2)
pa2 <- ggplot(data = mergedaph1, aes(x = date)) +
geom_bar(aes(y = Maturity), stat = 'identity', fill = "grey61", width = 0.80)+
geom_bar(aes(y = daphnia*5), stat = 'identity', color = "black", width = 0.50)+
scale_y_continuous("Maturity rate", sec.axis = sec_axis(~./1, name = "Abundance (ind/L)",
labels = function(b) { paste0(round(b / 5, 2), "")})) +
geom_vline(xintercept = (12 * (c(31, 365) / 365) + 0.5), lty = 2, size = .8)+
xlab("Date")+
theme_bw()+
theme(panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_blank(),
axis.text=element_text(size=15),
axis.title=element_text(size=17),
axis.text.y.left = element_text(color = "grey55", size = 15), 
axis.title.y.left = element_text(color = "grey55", size = 17),
axis.text.y.right = element_text(color = "black", size = 15), 
axis.title.y.right = element_text(color = "black", size = 17)
)
pa2

我也接受其他建议,以使图形更易于阅读。

谢谢!

1 个答案:

答案 0 :(得分:2)

也许您可以将此视为一个选项。这是一种使用两次数据和一个虚拟变量来破解图以使用position_dodge()的方法。您可以克隆数据,添加类别并可以绘制图表。尽管它起作用,但您仍必须调整轴标签,因为它们会移动。如果您发现另一种爆炸方式,我将在此处保留代码:

library(ggplot2)
#Data
mergedaph1 <- structure(list(date = structure(1:3, .Label = c("2018-07-12", 
"2018-09-09", "2019-08-01"), class = "factor"), Maturity = c(0.35, 
0.02, NA), daphnia = c(0.0249, 0.0256, 0)), class = "data.frame", row.names = c(NA, 
-3L))

必须如何破解数据:

#Scale factor
scalef <- max(mergedaph1$Maturity,na.rm=T)/max(mergedaph1$daphnia)
#Data 1
s1 <- mergedaph1
s1$Maturity <- NA
dat1 <- rbind(mergedaph1,s1)
dat1$Cat <- c(rep('c1',3),rep('c2',3))
#Data 2
s2 <- mergedaph1
s2$daphnia <- NA
dat2 <- rbind(mergedaph1,s2)
dat2$Cat <- c(rep('c1',3),rep('c2',3))

以及绘图代码:

#Plot
ggplot(data = dat1, aes(x = date,fill=Cat)) +
  geom_bar(aes(y = Maturity), stat = 'identity',
           width = 0.80,position = position_dodge(1.9),show.legend = F)+
  scale_fill_manual(values=c('grey61','grey61'))+
  geom_bar(data=dat2,aes(y = daphnia*scalef,fill=Cat), stat = 'identity',
           width = 0.50,position = position_dodge(1.9),fill='black')+
  scale_y_continuous("Maturity rate",
                     sec.axis = sec_axis(~./scalef, name = "Abundance (ind/L)")) +
  geom_vline(xintercept = (12 * (c(31, 365) / 365) + 0.5), lty = 2, size = .8)+
  xlab("Date")+
  theme_bw()+
  theme(axis.text.x = element_text(hjust=1),
        axis.ticks = element_blank())+
  theme(panel.background = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        plot.background = element_blank(),
        axis.title=element_text(size=17),
        axis.text.y.left = element_text(color = "grey55", size = 15), 
        axis.title.y.left = element_text(color = "grey55", size = 17),
        axis.text.y.right = element_text(color = "black", size = 15), 
        axis.title.y.right = element_text(color = "black", size = 17)
  )

输出:

enter image description here

由于最终值为零,NA不会显示。

相关问题