带 ggplot 的 3D 数据
3D Data with 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) 数据绘制为曲面和等高线图,可能对数据进行插值以获得尽可能平滑的图形。
搜索我找到了进行插值的 akima
包:
im <- with(df,interp(x,y,z))
我无法使用此输出绘制数据。理想情况下,我想使用 ggplot2,因为我想向原始图中添加内容。
谢谢!
我有点不明白你在找什么,但是这样的东西怎么样?
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()
对于等高线图,我使用 "rgl" 包。这允许 real-time 操纵绘图以获得最佳视图。
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 的网格间距已经足够接近了。
我有以下形式的数据:
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,因为我想向原始图中添加内容。
谢谢!
我有点不明白你在找什么,但是这样的东西怎么样?
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()
对于等高线图,我使用 "rgl" 包。这允许 real-time 操纵绘图以获得最佳视图。
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 的网格间距已经足够接近了。