R:“着色”根据另一个变量进行绘图

Posted

技术标签:

【中文标题】R:“着色”根据另一个变量进行绘图【英文标题】:R: "Coloring" plotly plots according to another variable 【发布时间】:2021-10-01 10:47:17 【问题描述】:

我正在使用 R 编程语言。我正在尝试在此处复制此 Stack Overflow 帖子中提供的答案:Color surface by variable with plotly in R

假设我有以下“数据框”(“my_grid”):

library(plotly)
library(dplyr)

#create grid and evaluate function
input_1 <- seq(0,100,1)
input_2 <- seq(0,100,1)
input_3 <- seq(0,100,1)
input_4 <- seq(0,100,1)

my_grid <- data.frame(input_1, input_2, input_3, input_4)
my_grid$final_value = sin(input_1) + cos(input_2) + input_3 + input_4

我们可以看到这个数据框的样子:

head(my_grid)

  input_1 input_2 input_3 input_4 final_value
1       0       0       0       0    1.000000
2       1       1       1       1    3.381773
3       2       2       2       2    4.493151
4       3       3       3       3    5.151128
5       4       4       4       4    6.589554
6       5       5       5       5    9.324738

问题:我想用变量“input_1”、“input_2”、“input_3”制作一个 3D 曲面图 - 然后根据“final_value”为曲面着色"

       plot_ly() %>% 
            add_trace(data = my_grid,  x=my_grid$input_1, y=my_grid$input_2, z=my_grid$input_3, type="mesh3d" )
 %>%   add_surface(surfacecolor = my_grid$final_value,
                  cauto=F,
                  cmax=max(my_grid$final_value),
                  cmin=min(my_grid$final_value)
      )

但这会返回几个错误,例如:

Error: unexpected SPECIAL in "%&gt;%" Error: unexpected ',' in " cauto=F,"

我尝试了不同的方法来调试这段代码,但我似乎无法弄清楚。有人可以告诉我如何解决这些错误吗?

【问题讨论】:

感谢您的回复...我对数据框比较熟悉,对矩阵不太熟悉...仍在尝试弄清楚。感谢您的帮助! 你能查一下here 【参考方案1】:

我修复了您的一些syntax 并将z = my_grid %&gt;% as.matrix() 添加到您的代码中,它现在按预期工作。见下文,

plot_ly() %>% 
        add_trace(data = my_grid,  x=my_grid$input_1, y=my_grid$input_2, z=my_grid$input_3, type='mesh3d') %>%
        add_surface(
                z = my_grid %>% as.matrix(),
                surfacecolor = my_grid,
                cauto=F,
                cmax=max(my_grid$final_value),
                cmin=min(my_grid$final_value)
        )

您的第一个错误如下,

foo()
%>% bar()

为了使%&gt;% 能够按预期工作,它必须在结束括号内。

syntax 得到纠正后,我得到了Error: 'z' must be a numeric matrix。因此我添加了z = my_grid %&gt;% as.matrix()


注意:如果仍然无法正常工作,请发布您的sessionInfo(),因为在syntax 更正和添加arguments. 后代码对我有效

【讨论】:

非常感谢您的回答!在上图中,x = input_1、y = input_2 和 z = input_3?如果您在此处放大此图片:imgur.com/a/VruwFPg,您将看到 x = 4、y = 100 和 z = 200.356 的点。在原始数据(“my_grid”)中,该点不存在。出现这一点是否有原因?另外,是否可以在悬停文本中包含“my_value”?非常感谢您的帮助!

以上是关于R:“着色”根据另一个变量进行绘图的主要内容,如果未能解决你的问题,请参考以下文章

ShinyApp:使用选定的输入对分类变量的某些级别进行子集化,并将其用作在服务器中绘图的输入

绘图中的颜色点因值向量而异

在 R 中预测时自动绘图功能出错

高级绘图技能:基于R语言的时间序列数据动态展示

更改绘图热图中的颜色条标签 (R)

更改R中另一个绘图中单击的绘图限制