AW2*_*W27 2 r surface ggplot2 plotly ggplotly
我目前正在尝试开发一个曲面图来检查以下数据框的结果。我想在 x 轴上绘制噪声的增加值,在 y 轴上绘制 mu 的增加值,在 z 轴上绘制点估计值。查看 ggplot2 和 ggplotly 后,不清楚如何在表面或 3D 图中绘制这些列中的每一列。
df <- "mu noise0 noise1 noise2 noise3 noise4 noise5
1 1 0.000000 0.9549526 0.8908646 0.919630 1.034607
2 2 1.952901 1.9622004 2.0317115 1.919011 1.645479
3 3 2.997467 0.5292921 2.8592976 3.034377 3.014647
4 4 3.998339 4.0042379 3.9938346 4.013196 3.977212
5 5 5.001337 4.9939060 4.9917115 4.997186 5.009082
6 6 6.001987 5.9929932 5.9882173 6.015318 6.007156
7 7 6.997924 6.9962483 7.0118066 6.182577 7.009172
8 8 8.000022 7.9981131 8.0010066 8.005220 8.024569
9 9 9.004437 9.0066182 8.9667536 8.978415 8.988935
10 10 10.006595 9.9987245 9.9949733 9.993018 10.000646"
Run Code Online (Sandbox Code Playgroud)
提前致谢。
这是使用的一种方法geom_tile()
。首先,您需要将数据框转换为更整洁的格式,其目标是包含列:
fill=
使用此列应用美学。为此,我使用dplyr
和gather()
,但还有其他方法(melt()
, 或pivot_longer()
也可以实现)。我还添加了一些代码来仅提取“噪声”列的数字部分,然后将其重新格式化为整数,以确保 x 和 y 轴为数字/整数:
# assumes that df is your data as data.frame
df <- df %>% gather(key="noise", value="z", -mu)
df <- df %>% separate(col = "noise", into=c('x', "noise"), sep=5) %>% select(-x)
df$noise <- as.integer(df$noise)
Run Code Online (Sandbox Code Playgroud)
这是一个如何绘制它的示例,但美观程度取决于您。我决定还包括geom_text()
显示 的实际值,df$z
以便我们可以更好地了解正在发生的情况。另外,我使用彩虹是因为“它很漂亮” - 您可能想从RColorBrewer
包装中选择更合适的定量比较刻度。
ggplot(df, aes(x=noise, y=mu, fill=z)) + theme_bw() +
geom_tile() +
geom_text(aes(label=round(z, 2))) +
scale_fill_gradientn(colors = rainbow(5))
Run Code Online (Sandbox Code Playgroud)
编辑:为了回答OP的后续行动,是的,你也可以通过展示这一点plotly
。这是直接转换:
p <- plot_ly(
df, x= ~noise, y= ~mu, z= ~z,
type='mesh3d', intensity = ~z,
colors= colorRamp(rainbow(5))
)
p
Run Code Online (Sandbox Code Playgroud)
静态图在这里:
显示这组特定信息的一种更丰富的方法是通过创建然后使用它来绘图来查看df$z
它所涉及的变化。(您也可以通过上面的方式绘制):df$mu
df$delta_z
ggplot() + geom_tile()
df$delta_z <- df$z - df$mu
p1 <- plot_ly(
df, x= ~noise, y= ~mu, z= ~delta_z,
type='mesh3d', intensity = ~delta_z,
colors= colorRamp(rainbow(5))
)
Run Code Online (Sandbox Code Playgroud)
给你这个(这里是静态图片):