Tôi đang cố tô bóng một phần nhất định của một ô chuỗi thời gian (tương tự như đổ bóng suy thoái - tương tự như biểu đồ ở cuối this article on recession shading in excel). Tôi đã đặt một chút, có thể vụng về, mẫu lại với nhau để minh họa. Lần đầu tiên tôi tạo một chuỗi thời gian, vẽ nó bằng ggplot2 và sau đó muốn sử dụng geom_rect để cung cấp bóng. Nhưng tôi phải nhận được một cái gì đó sai trong các đối số.Sử dụng geom_rect để tô màu chuỗi thời gian trong R
a<-rnorm(300)
a_ts<-ts(a, start=c(1910, 1), frequency=12)
a_time<-time(a_ts)
a_series<-ts.union(big=a_ts, month=a_time)
a_series_df<-as.data.frame(a_series)
ggplot(a_series)+
geom_line(mapping=aes_string(x="month", y="big"))+
geom_rect(
fill="red",alpha=0.5,
mapping=aes_string(x="month", y="big"),
xmin=as.numeric(as.Date(c("1924-01-01"))),
xmax=as.numeric(as.Date(c("1928-12-31"))),
ymin=0,
ymax=2
)
Lưu ý rằng tôi cũng đã thử cũng không hoạt động.
geom_rect(
fill="red",alpha=0.5,
mapping=aes_string(x="month", y="big"),
aes(
xmin=as.numeric(as.Date(c("1924-01-01"))),
xmax=as.numeric(as.Date(c("1928-12-31"))),
ymin=0,
ymax=2)
)
Lưu ý rằng điều này làm việc vì 'aes() 'được chuyển trực tiếp đến từng Geom, và không cho' ggplot() '. Wierdness xảy ra sau đó nếu bạn cung cấp 'aes (x = Date, ...)' cho 'ggplot()' và sử dụng 'geom_rect()' với bất kỳ địa lý nào khác ... – Jthorpe
@ Jthorpe nó là về thứ tự âm mưu, tôi có thể đặt aes bên trong ggplot và dòng âm mưu sau đó rect, nhưng sau đó dòng sẽ được đằng sau rect. Tất nhiên chúng ta có thể sử dụng alpha. Sở thích. – zx8754
Ok là cụ thể, Nếu bạn cung cấp 'aes()' cho 'ggplot()', bạn sẽ cần phải cung cấp tất cả các biến trong lời gọi đó tới 'aes()' trong dữ liệu được truyền đến 'geom_rect()' và các lớp của các trường sẽ phải nhất quán. Dễ dàng hơn nhiều trong việc chuyển cuộc gọi sang 'aes()' thành các địa lý riêng lẻ hơn là xây dựng các biến bắt buộc với các định dạng đúng trong khung dữ liệu được chuyển tới 'geom_rect()'. – Jthorpe