Uczyłem się ggplot2 i mam nadzieję, że z niego skorzystamdla wszystkich moich grafów R. Jednakże, muszę jeszcze znaleźć sposób na utworzenie wykresu konturu, który wygląda analogicznie do konwencjonalnego wykresu konturu, na przykład co można uzyskać za pomocą siatki: filled.contour (). Na przykład:
#define data
x<-seq(1,11,1)
y<-seq(1,11,1)
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y}
#contour plot using lattice graphics and R Color Brewer
library(lattice) #for filled.contour()
library(RColorBrewer) #for brewer.pal()
z.lattice<-outer(x,y,xyz.func)
filled.contour(x,y,z.lattice,nlevels=6,col=brewer.pal(6,"YlOrRd"))
Daje mi to ładną linię konturu.
Teraz, spróbujmy tego samego w ggplot2. Najlepsze, co mogę wymyślić, oparte na wszystkim, co przeczytałem (szczególnie Rysowanie etykiet na płaskim przekroju warstwic w ggplot2) jest:
#contour plot using ggplot2
library(ggplot2)
library(reshape2) #for melt()
z.molten<-melt(z.lattice)
names(z.molten) <- c("x", "y", "z")
v<-ggplot(z.molten, aes(x,y,z=z))+
geom_tile(aes(fill=z))+
stat_contour(bins=6,aes(x,y,z=z), color="black", size=0.6)+
scale_fill_gradientn(colours=brewer.pal(6,"YlOrRd"))
v
Ten wykres ma tę samą podstawową ideę co fill.contour (), ale kolorowe kafelki nie pasują do konturów bardzo dobrze.
Nie udało mi się także zmienić wymiarów płytek.
Wszelkie sugestie, jak sprawić, by wynik ggplot2 był bliższy wynikowi fill.contour ()?
Odpowiedzi:
13 dla odpowiedzi nr 1Wydaje się, że istotą twojego pytania jest to, jak utworzyć konturowy wykres w ggplot oddzielny wypełnione kontury, a nie ciągłe kontury, jak przy użyciu konwencjonalnych geom_tile(...)
podejście. Oto jeden sposób.
x<-seq(1,11,.03) # note finer grid
y<-seq(1,11,.03)
xyz.func<-function(x,y) {-10.4+6.53*x+6.53*y-0.167*x^2-0.167*y^2+0.0500*x*y}
gg <- expand.grid(x=x,y=y)
gg$z <- with(gg,xyz.func(x,y)) # need long format for ggplot
library(ggplot2)
library(RColorBrewer) #for brewer.pal()
brks <- cut(gg$z,breaks=seq(0,100,len=6))
brks <- gsub(","," - ",brks,fixed=TRUE)
gg$brks <- gsub("\(|\]","",brks) # reformat guide labels
ggplot(gg,aes(x,y)) +
geom_tile(aes(fill=brks))+
scale_fill_manual("Z",values=brewer.pal(6,"YlOrRd"))+
scale_x_continuous(expand=c(0,0))+
scale_y_continuous(expand=c(0,0))+
coord_fixed()
Zastosowanie np. scale_x_continuos(...)
jest po prostu pozbyciem się dodatkowej przestrzeni ggplot
obraca się wokół granic osi; dobrze dla większości rzeczy, ale rozprasza uwagę na poletkach konturu. Sposób użycia coord_fixed(...)
jest po prostu ustawić współczynnik proporcji na 1: 1. Są to opcjonalne.