2017-09-21 3 views
0

Ich habe ein paar Daten und ich habe versucht, eine filled.contour Handlung, die nett scheint. Allerdings ist die Legende schwer zu kontrollieren, also denke ich, ggplo2 zu verwenden. Aber ich habe keine Ahnung, wie man eine filled.contour mit ggplot2 plotten kann.Wie zeichne ich ein gefüllter.Contour-Plot mit ggplot2?

Die Daten enthalten 840 Zeilen (die für die Daten stehen) und 12 Spalten (die für 12 Zeitskalen stehen). Hier ist ein Beispiel

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

Wie wir sehen können, die Legende Intervalle sind nicht das, was ich will. Ich möchte -3.5,-2.5,-1.5,0,1.5,2.5,3.5 auf der Legende zeigen und ich glaube, es ist viel einfacher, dies mit ggplot2 zu tun. Danke für jede Hilfe.

Antwort

4

Eine ggplot2 Alternative zu filled.contour ist 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

Vielen Dank für Ihre Hilfe. Aber ich frage mich, wie man die Legende bricht, die ich will? Vielen Dank. –

+0

Übrigens ist die mit 'ggplot2' geplottete Figur ganz anders als die mit' filled.contour' geplottete Figur. Könnten Sie das beheben? Danke vielmals. –

+0

@YangYang In welchem ​​Sinne ist "ganz anders"? Ich replizierte es mit 'filled.contour', aber ich fand nur geringe Unterschiede. Bitte geben Sie mir mehr Details. –

Verwandte Themen