2017-09-21 137 views
0

我有一些數據,我已經嘗試了一個filled.contour情節,這似乎很好。然而,傳說很難控制,所以我想用ggplo2。但我不知道如何使用ggplot2來繪製filled.contour如何使用ggplot2繪製filled.contour圖?

數據包含840行(代表日期)和12列(代表12個時間尺度)。下面是一個例子

set.seed(66) 
Mydata <- sample(x=(-3:3),size = 840*12,replace = T) 
Mydata <- matrix(data=Mydata,nrow=840,ncol=12) 
Dates <- seq(from=1948+1/24, to= 2018,by=1/12) 
data.breaks <- c(-3.5,-2.5,-1.5,0,1.5,2.5,3.5) 
filled.contour(Dates,seq(1:12),Mydata,col=cols(11),xlab="",ylab="time-scale",levels=data.breaks) 

enter image description here

我們可以看到,傳說間隔是不是我想要的。我想在圖例上顯示-3.5,-2.5,-1.5,0,1.5,2.5,3.5,我相信用ggplot2這樣做更容易。謝謝你的幫助。

回答

4

A ggplot2替代filled.contour的是stat_contour

library(ggplot2) 
library(reshape2) 
set.seed(66) 
Mydata <- sample(x=(-3:3),size = 840*12,replace = T) 
Mydata <- matrix(data=Mydata,nrow=840,ncol=12) 
Dates <- seq(from=1948+1/24, to= 2018,by=1/12) 
data.breaks <- c(-3.5,-2.5,-1.5,0,1.5,2.5,3.5) 
rownames(Mydata) <- Dates 

d <- melt(Mydata) 
colfunc = colorRampPalette(c("brown", "red", "yellow", "white")) 
ggplot(d, aes(Var1, Var2, z=value, fill = value)) + 
    stat_contour(geom="polygon", aes(fill=..level..)) + 
    scale_fill_gradientn(colours = colfunc(7), breaks=data.breaks, limits=c(-4,4), 
          values=scales::rescale(data.breaks))+ 
    theme_bw() + 
    scale_x_continuous(name="", breaks=seq(1950,2010,20), expand=c(0,0)) + 
    scale_y_continuous(name="time-scale", expand=c(0,0))+ 
    guides(fill = guide_colorbar(barwidth = 2, barheight = 15)) 

enter image description here

+0

非常感謝你的幫助。但我想知道如何獲得我想要的傳奇故事?謝謝。 –

+0

順便說一句,'ggplot2'繪製的圖與'filled.contour'繪製的圖完全不同,你能解決這個問題嗎?非常感謝。 –

+0

@YangYang什麼意思是「完全不同」?我用'filled.contour'複製了它,但我發現只有很小的差異。請給我更多的細節。 –