2015-02-04 29 views
7

Tôi muốn vẽ hình này với fill.contour(), nhưng trong ggplot2, làm cách nào để làm điều này?Kết quả đầu ra của âm mưu fill.contour() trong ggpplot2

Tôi muốn sử dụng ggplot2 vì quy ước đồ thị dễ dàng hơn. Lý do tôi muốn sử dụng hàm fill.contour() là vì tôi đã thử geom_tile() và image.plot() và cả hai đều tạo ra các tile giống như các kết quả đầu ra, và tôi cần một đầu ra tương tự như filled.contour().

Đây là con số của tôi:

enter image description here

Code:

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))) 

Snippet dữ liệu:

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

Dữ liệu của bạn chứa bản sao và nguyên nhân 'interp' nhức đầu. Ngoài ra, tại sao bạn đính kèm 'df'? – hrbrmstr

+0

Tôi có lẽ có thể loại bỏ các bản sao bằng cách nào đó, nhưng như để gắn - chỉ vì đó là điều ai đó đã bảo tôi làm. Vì vậy, tôi không nên? – Roseanna

Trả lời

1

tôi lấy ví dụ từ ggplot2 website.

# 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..)) 

Trong đó x và y là bạn Long và Lạt và z là d13C

12

Bạn có thể tinh chỉnh màu sắc như bạn cần:

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

Bạn có thể giảm pixelation với chi phí của một số thời gian xử lý bằng cách tăng mật độ nội suy:

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

và cũng làm giảm chiều rộng bin:

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

LƯU Ý: có nghĩa là sẽ crunch trong vài giây đáng chú ý trên một hệ thống máy tính để bàn đàng hoàng. Trên MacBook khá lực lưỡng của tôi Pro đó là:

user system elapsed 
    6.931 0.655 8.153 
+0

cảm ơn nhưng như tôi đã nói trong câu hỏi, tôi đã cố gắng geom_tile trước, và một lần nữa với mã của bạn, nhưng nó quá pixelated. Bất kỳ ý tưởng để làm cho nó ít pixelated? Xin chào – Roseanna

+0

Xin chào @hbrmstr câu trả lời rất hay nhưng tôi có một câu hỏi khác. Có thể thêm một geom_path trên trường nội suy không? Tôi không thể thành công. – pacomet

2

Để theo dõi ví dụ tối thiểu @ hrbrmstr, bạn cũng có thể có tính toán ggplot2 "z" cho bạn: snippet

library(ggplot2) 
ggplot(data = faithful, aes(x = eruptions, y = waiting)) + 
    stat_density2d(aes(colour = ..level.., fill = ..level..), geom = "polygon") 
Các vấn đề liên quan