我做了一個氣候圖,我使用geom_ribbon
來顯示,降水在哪裏比溫度低。ggplot2:由一條線定義的更多單獨的色帶
但是,由於我在一行中定義了geom_ribbon
,因此它想要將其中的一半合併爲一個,因此它使得灰色「線」的片段,就像您在圖像上看到的那樣。
你有什麼想法如何擺脫這個片段?
tit <- "Name"
subtit <- "280 m a.s.l., 8.5 °C, 500 mm"
abb<- c("J","F","M","A","M","J","J","A","S","O","N","D")
magnify <- 2
dat<-as.data.frame(1:12)
dat$'1:12' <- clim$code
names(dat) <- ("code")
dat$T<-c(-4.2,-0.6,8.6,19.0,28.4,34.8,38.4,38.2,29.6,18.6,8.0,-0.8)
dat$prec<-c(26,23,31,28,60,72,61,40,10,20,36,35)
dat$code <- factor(1:12, levels = 1:12)
dat$T <- dat$T * magnify
head(dat)
dat.new = cbind.data.frame(
code=seq(1,12,length=200),
sapply(dat[,c("prec","T")], function(T) approxfun(dat$code, T)(seq(1,12,length=200)))
)
#subsetting data
cut_max <- (dat.new$prec>=dat.new$T)
cut_min <- (dat.new$prec<=dat.new$T)
sub_max <- dat.new[cut_max, ]
sub_min <- dat.new[cut_min, ]
繪圖:
#plotting
library(ggplot2)
ggplot(dat.new, aes(x = code)) +
geom_ribbon(data = sub_max, aes(ymin = T, ymax = prec), alpha = 0.5, fill = "grey25") +
#geom_ribbon(data = sub_min, aes(ymin = T, ymax = prec), fill = "red", alpha = 0.2) +
geom_line(aes(y = prec, group = 1), colour = "blue", size = 1.5, alpha = 1) +
geom_line(aes(y = T, group = 1), colour = "red", size = 1.5, alpha = 1) +
expand_limits(y = 0, ymax = 200) +
geom_line(aes(y = 0, group = 1), size = 0.5) +
theme_bw() +
theme(plot.title = element_text(lineheight=.8, face="bold"))+
scale_y_continuous(name = 'Precipitation (mm)',
sec.axis = sec_axis(trans = ~ . * (1/magnify), name = 'Temperature (°C)')) +
theme(legend.position = "none",
panel.grid.minor.y = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.x = element_blank(),
text=element_text(size=16, family="Comic Sans MS"))+
scale_x_continuous(breaks=1:12, labels=abb)+
labs(title = tit, subtitle = subtit)
您可以使用一個類似的技術[這個答案](http://stackoverflow.com/a/41663887/496488)本打算昨天問的問題,除非你想ymin和ymax等於溫度高於降水量的x值的紅色線的值(這樣,色帶將成爲紅線正下方的細線,因此將不可見)。 – eipi10
其他一些事情:您可能希望將軸標題(可能是軸文本)的顏色設置爲降水的藍色,對於溫度的顏色設置爲紅色,以便更容易看出哪條軸適用於每條曲線。另外,爲了節省一些輸入,你可以使用'abb = substr(month.abb,1,1)'。 – eipi10