我今天已经尝试了很长时间,但仍然无法通过相同的 X 轴将两种不同的图表类型对齐在一起。当两个图表具有相同的 X 轴时,我只需要在条形图顶部添加一个双折线图。
下面是我的数据以及到目前为止我编写的代码以及一些不同的尝试。
我的数据:
Date <- c("2015-07-22", "2015-07-23", "2015-07-24", "2015-07-25", "2015-07-26", "2015-07-27", "2015-07-28", "2015-07-29", "2015-07-30", "2015-07-31", "2015-08-01", "2015-08-02", "2015-08-03", "2015-08-04", "2015-08-05")
Mean_temp12z <- c(66.6, 64.6, 67.6, 69.6, 72.0, 71.8, 73.0, 72.2, 72.8, 71.8, 69.4, 64.2, 61.2, 62.0, 63.4)
Mean_temp0z <- c(62.8, 65.0, 67.4, 71.6, 72.4, 71.6, 71.0, 71.8, 71.6, 69.6, 69.2, 66.2, 60.6, 63.6, 66.4)
temp_deltalow <- c( 3.8, -0.4, 0.2, -2.0, -0.4, 0.2, 2.0, 0.4, 1.2, 2.2, 0.2, -2.0, 0.6, -1.6, -3.0)
GFS_low_changes <- data.frame(Date, Mean_temp12z, Mean_temp0z, temp_deltalow)
到目前为止,我绘制的是一个双折线图,其中显示了以下代码和图像:
low_line <- ggplot(GFS_low_changes, aes(Date))+ geom_line(aes(y= Mean_temp12z, colour= "Mean_temp12z" ))+ geom_line(aes(y= Mean_temp0z, colour= "Mean_temp0z"))+
geom_point(aes(y= Mean_temp12z))+ geom_point(aes(y= Mean_temp0z))+
theme(legend.title= element_text(colour="black", size=12))+
scale_color_discrete(name="GFS Models")+ labs(y= "Temperature °F")
我还绘制了一个条形图,显示了 0z 模型和 12z 模型之间的差异,代码和图像如下所示:
low_bar <- ggplot(data = GFS_low_changes, aes(x= Date, y = temp_deltalow)) +
geom_bar(colour= "black", fill= ifelse(temp_deltalow>0,"red","blue"), stat= "identity", position = "identity") +
geom_text(aes(label= paste(temp_deltalow, "°F"),hjust= 0.4, vjust= ifelse(temp_deltalow>0,-0.5,1)), size= 5)
因此,在创建了这两个图表后,我想将它们在 X 轴上与条形图顶部的折线图合并。两者之间的无缝间距是可取的,但我无法让它们接近排列。
我尝试grid.draw
将 gridExtra 包中的函数与代码一起使用:
grid.newpage()
grid.draw(rbind(ggplotGrob(low_line), ggplotGrob(low_bar), recording= T))
但我收到一个错误告诉我:错误:ncol(x) == ncol(y) is not TRUE
我也使用过grid.arrange
它可以得到更好的结果,但没有接近相同的 x 轴和两个图表之间的无缝集成。
我想避免在这里运行,但我确实尝试融化上面的数据框并且只能成功绘制折线图。但也非常感谢这方面的任何帮助。
在我的尝试中,我主要是跑掉这个例子:https ://gist.github.com/tomhopper/faa24797bb44addeba79
非常感谢您对此问题的任何帮助!