繁体   English   中英

使用ggplot和geom_rect

[英]Using ggplot and geom_rect

我有以下3个时间序列:

a<-rnorm(357)
b<-rnorm(357)
c<-rnorm(357)

a_ts<-ts(a, start=c(1980, 1), frequency=12)
b_ts<-ts(b, start=c(1980, 1), frequency=12)
c_ts<-ts(c, start=c(1980, 1), frequency=12)

a_time<-time(a_ts)
a_series<-ts.union(month=a_time,a=a_ts)
a_series_df<-as.data.frame(a_series)
a_series_df["b"] <- b_ts
a_series_df["c"] <- c_ts

要使用ggplot函数,我将其melted了:

melted = melt(a_series_df, id.vars="month")

剧情进展顺利:

ggplot(data=melted, aes(x=month, y=2*value)) + geom_line(aes(colour = variable))

但是,当我要在下面的这些间隔之间进行散点图时,它显示此错误消息:

shade = data.frame(x1=c(1980.333 ,2009.167), x2=c(2007.333 ,2009.667), y1=c(0,3), y2=c(0,4))

ggplot(data=melted, aes(x=month, y=2*value)) + geom_line(aes(colour = variable))+
geom_rect(data=shade, mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2), color='grey', alpha=0.2)

Error in eval(expr, envir, enclos) : object 'month' not found

我想念什么?

你错过inherit.aes = FALSEgeom_rect层。 它期望能够从ggplot初始化中找到所有映射的变量,除非您告诉它不要继承那些美学。

这有效:

ggplot(data = melted, aes(x = month, y = 2 * value)) +
    geom_line(aes(colour = variable))+
    geom_rect(data = shade,
              mapping = aes(xmin = x1, xmax = x2, ymin = y1, ymax = y2),
              color = 'grey',
              alpha = 0.2,
              inherit.aes = FALSE)

第一个矩形仍然没有显示,因为您的矩形数据的y1y2均为0因此它只是一条线。 第二个矩形在那里,但是非常小。

shade
#         x1       x2 y1 y2
# 1 1980.333 2007.333  0  0
# 2 2009.167 2009.667  3  4

设置color为矩形的轮廓, fill为矩形的填充颜色。

暂无
暂无

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

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