繁体   English   中英

R ggplot2 包:从单独的数据帧在条形图(geom_bar)上绘制线(geom_line)

[英]R ggplot2 package: plotting Line (geom_line)over on Bar Graph (geom_bar) from separate data frames

我有一个来自一组年度数据(具有多个 y 值)的条形图(使用 ggplot2 包创建),我想以一条线的形式覆盖另一组年度数据的数据。 这是我的代码:

library (zoo)
require(ggplot2)
library(reshape)
library(Cairo)
library(reshape2)
x<-c(2000,2001,2002,2003,2004)
y1<-c(41,62,71,316,172)
y2<-c(3018,2632,2643,2848,2738)
y3<-c(3065,2709,2721,3192,2925)
dat1 <- data.frame(Year=x, y1, y2)
dat.m1 <- melt(dat1, id.vars='Year')
a<-ggplot(dat.m1, aes(Year, value)) + 
  geom_bar(width=0.6,aes(fill = variable),stat = "identity")+
  xlab("Year") + ylab("Water Depth (mm)")+
  theme(legend.position="top")+
  theme(panel.background = element_rect(fill = 'white', colour = 'black'))+
  theme(axis.text=element_text(size=13),axis.title=element_text(size=14))+
  theme(legend.text=element_text(size=14))+
  theme(plot.margin=unit(c(0.2,0.7,0.5,0.2),"cm"))+
  guides(fill = guide_legend(title="", title.position="top", direction="horizontal"))
a

在这个阶段,条形图运行良好,但是当我尝试从不同的数据框中添加线图时,如下所示:

dat2 <- data.frame(Year=x, y3)
dat.m2 <- melt(dat2, id.vars='Year')
b<-ggplot(dat.m1, aes(Year, value)) + 
  geom_bar(width=0.6,aes(fill = variable),stat = "identity")+
  geom_line(dat.m2, aes(x = x, y = y3), size = 1.5, color="red") +
  xlab("Year") + ylab("Water Depth (mm)")+
  theme(legend.position="top")+
  theme(panel.background = element_rect(fill = 'white', colour = 'black'))+
  theme(axis.text=element_text(size=13),axis.title=element_text(size=14))+
  theme(legend.text=element_text(size=14))+
  theme(plot.margin=unit(c(0.2,0.7,0.5,0.2),"cm"))+
  guides(fill = guide_legend(title="", title.position="top", direction="horizontal"))
b

它不起作用,我收到此错误消息:

validate_mapping()中的错误:! mapping必须由aes()创建运行rlang::last_error()以查看错误发生的位置。”

任何人都可以帮我解决这个问题吗? 另外,有什么建议可以在第一个数据框中为每个条添加线图吗?

您需要在geom_line()中添加参数名称data 否则dat.m2被接收为映射到geom_line函数。


dat2 <- data.frame(Year = x, y3)
dat.m2 <- melt(dat2, id.vars = 'Year')

b <- ggplot(dat.m1, aes(Year, value)) +
  geom_bar(width = 0.6, aes(fill = variable), stat = "identity") +
  geom_line(data = dat.m2, aes(x = x, y = y3), size = 1.5, color = "red") + # adding data argument name
  xlab("Year") + ylab("Water Depth (mm)") +
  theme(legend.position = "top") +
  theme(panel.background = element_rect(fill = 'white', colour = 'black')) +
  theme(axis.text = element_text(size = 13),
        axis.title = element_text(size = 14)) +
  theme(legend.text = element_text(size = 14)) +
  theme(plot.margin = unit(c(0.2, 0.7, 0.5, 0.2), "cm")) +
  guides(fill = guide_legend(
    title = "",
    title.position = "top",
    direction = "horizontal"
  ))
b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM