使用ggplot的3D数据

时间:2016-01-26 16:36:25

标签: r ggplot2 3d contour

我的数据如下:

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)数据绘制为曲面图和等高线图,可能插入数据以获得尽可能平滑的数字。

搜索我到达了进行插值的akima包:

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

我无法使用此输出绘制数据。理想情况下,我想使用ggplot2,因为我想在原始图中添加内容。

谢谢!

2 个答案:

答案 0 :(得分:2)

我对你要找的东西感到有些疑惑,但这样的事情怎么样?

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

答案 1 :(得分: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网格间距足够接近。