2016-01-26 42 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