2015-02-04 63 views
7

Bu şekil, fill.contour() ile oluşturulan grafiği çizmek istiyorum ancak ggplot2'de bunu nasıl yapabilirim?R plot filled.contour() çıktısı ggpplot2

Ggplot2'yi kullanmak istiyorum çünkü grafik kuralları daha kolay. Filled.contour() kullanmak istediğim nedeni, geom_tile() ve image.plot() 'ı denedim ve her ikisi de çıkışlar gibi çok fayans yarattılar ve fill.contour()' a benzer bir çıktıya ihtiyacım var.

Bu

benim rakamdır:

enter image description here

Kodu: Verilerin

library(akima) 

df <-read.table("Petra_phytoplankton+POM_xydata_minusNAs_noduplicates.txt",header=T) 
attach(df) 
names(df) 
fld <- with(df, interp(x = longitude, y = latitude, z = d13C)) 

filled.contour.ungeoreferenced <- 
    (filled.contour(x = fld$x, 
        y = fld$y, 
        z = fld$z, 
        color.palette = 
        colorRampPalette(c("blue", "green", "yellow", 
             "orange", "red")), 
        xlab = "Longitude", 
        ylab = "Latitude", 
        key.title = title(main = "d13C", 
            cex.main = 1))) 

Pasajı:

latitude longitude d13C 
-65 -70 -27.7 
-61 150 -32.2 
-61 150 -28.3 
-60 116 -26.8 
-60 116 -24.7 
-47 38 -24.8 
-38 150 -20.5 
19 -65.7 -19.9 
19 -65.5 -18.5 
18 -60.7 -20 
18 -58.5 -18.2 
18 -57.8 -19 
17 -55.4 -18.6 
17 -50.8 -18 
17 -47.1 -18.3 
17 -45.5 -19.4 
16 -43.3 -17.9 
15 -40.7 -18.5 
14 -39.3 -19.9 
12 -36.7 -19.9 
12 -36.2 -19.9 
11 -34.4 -19.2 
10 -32 -18.5 
9 -30.3 -19.3 
8 -29.2 -19.4 
7 -26.6 -18.2 
7 -25.5 -19.3 
6 23.9 -20 
3 -21.3 -20.4 
+0

Veri pasajı yinelemeleri ve nedenleri içermektedir "baş ağrısı". Ayrıca, neden 'df' ekliyorsunuz? – hrbrmstr

+0

Muhtemelen kopyalardan bir şekilde kurtulabilirim, ama takmak için olduğu gibi - sadece birisinin yapmamı istediği şey buydu. Yani yapmamalı mıyım? – Roseanna

cevap

1

ben ggplot2 website den örnek aldı.

# Generate data 
library(reshape2) # for melt 
volcano3d <- melt(volcano) 
names(volcano3d) <- c("x", "y", "z") 

# Basic plot 
v <- ggplot(volcano3d, aes(x, y, z = z)) + 
    stat_contour(geom="polygon", aes(fill=..level..)) 
x ve y

da Long ve Lat ve istediğiniz kadar z D13C

12

Renkleri çimdik geçerli:

gdat <- interp2xyz(fld, data.frame=TRUE) 

ggplot(gdat) + 
    aes(x = x, y = y, z = z, fill = z) + 
    geom_tile() + 
    coord_equal() + 
    geom_contour(color = "white", alpha = 0.5) + 
    scale_fill_distiller(palette="Spectral", na.value="white") + 
    theme_bw() 

enter image description here

Sen pikselleşme azaltabilir interpolasyon yoğunluğunu artırarak bazı işlem süresinin maliyetine:

fld <- with(df, interp(x = longitude, 
         y = latitude, 
         z = d13C, 
         xo = seq(min(longitude), max(longitude), length=400), 
         duplicate="mean")) 

ve ayrıca bin genişliğini azaltan:

ggplot(gdat) + 
    aes(x = x, y = y, z = z) + 
    geom_tile(aes(fill=z)) + 
    coord_equal() + 
    stat_contour(aes(fill=..level..), geom="polygon", binwidth=0.005) + 
    geom_contour(color="white", alpha=0.5) + 
    scale_fill_distiller(palette="Spectral", na.value="white") + 
    theme_bw() 

enter image description here

NOT: Bu iyi bir masaüstü sistemi üzerinde belirgin bir kaç saniye crunch gidiyor. Benim oldukça kaslı MacBook üzerinde o Pro oldu:

user system elapsed 
    6.931 0.655 8.153 
+0

teşekkürler, ama sözde dediğim gibi, geom_tile'i daha önce ve kodunuzla tekrar denedim, ama çok pikselli. Daha az pikselli hale getirmek için herhangi bir fikir? Alkışlar – Roseanna

+0

Merhaba @hbrmstr çok iyi bir cevap ama başka bir sorum var. Enterpolasyonlu alanda bir geom_path eklemek mümkün mü? Başaramam. – pacomet

2

@ hrbrmstr en az örneği takip için ayrıca sizin için ggplot2 bilgi işlem "z" sahip olabilir:

library(ggplot2) 
ggplot(data = faithful, aes(x = eruptions, y = waiting)) + 
    stat_density2d(aes(colour = ..level.., fill = ..level..), geom = "polygon")