2016-01-26 73 views
0

我有以下形式的數據:與ggplot三維數據

x <- seq(from = 0.01,to = 1, by = 0.01) 
y <- seq(from = 0.01,to = 1, by = 0.01) 

xAxis <- x/(1+x*y) 
yAxis <- x/(1+x*y) 

z <- (0.9-xAxis)^2 + (0.5-yAxis)^2 

df <- expand.grid(x,y) 
xAxis <- df$Var1/(1+df$Var1*df$Var2) 
yAxis <- df$Var2/(1+df$Var1*df$Var2) 

df$x <- xAxis 
df$y <- yAxis 
df$z <- z 

我想繪製TE(X,Y,Z)的數據作爲一個表面和等高線圖,possibily內插數據,以獲得光滑儘可能的數字。

搜索我到達akima包裏面做插值:

im <- with(df,interp(x,y,z)) 

我無法與該輸出繪製的數據。理想情況下,我想使用ggplot2,因爲我想將東西添加到原始圖中。

謝謝!

回答

1

我對你在找什麼有點困惑,但是這樣的事情呢?

im <- with(df, akima::interp(x, y, z, nx = 1000, ny = 1000)) 
df2 <- data.frame(expand.grid(x = im$x, y = im$y), z = c(im$z)) 

ggplot(df2, aes(x, y, fill = z)) + 
    geom_raster() + 
    viridis::scale_fill_viridis() 

enter image description here

+0

我會檢查你的解決方案,但我想用這些(x,y,z)數據繪製曲面和等高線圖。我想可能需要進行一些插值來獲得更具代表性的圖。 – user191919

0

對於等高線圖,我用的是 「RGL」 包。這允許對情節進行實時處理以獲得最佳視圖。

library("rgl") 

x <- seq(from = 0.01,to = 1, by = 0.01) 
y <- seq(from = 0.01,to = 1, by = 0.01) 

#z <- (0.9-xAxis)^2 + (0.5-yAxis)^2 

df <- expand.grid(x,y) 
xAxis <- df$Var1/(1+df$Var1*df$Var2) 
yAxis <- df$Var2/(1+df$Var1*df$Var2) 

df$z <- (0.9-xAxis)^2 + (0.5-yAxis)^2 

surface3d(x=x, y=y, z=df$z, col="blue", back="lines") 
title3d(xlab="x", zlab="z", ylab="y") 
axes3d(tick="FALSE") 

rgl軟件包與ggplot2軟件包相媲美,可以自定義最終的繪圖。對於這種類型的光滑表面,0.01格柵間距足夠接近。

+0

我怎樣才能看到輪廓? – user191919

+0

我相信lines3d或planes3d可以用來生成等高線,甚至地形顏色可以突出輪廓。 – Dave2e

+0

要將3D圖輸出爲html格式,請使用:browseURL(paste(「file://」,writeWebGL(width = 700),sep =「」)) – JohnBee