在 Plotly 的 Scatter3D 中改变颜色

3
我使用R中的Plotly创建了以下3D散点图。我使用了以下代码。数据集Txy仅包含每个标记的x,y,z坐标以及每个坐标点上的0-1.5之间的值(在名为vectorM的列中)。
figfactor<- plot_ly(setTxy, x=~xplot,y=~yplot*-1,z=(~zplot*-1),
             type="scatter3d",mode="markers",
             marker=list(color=~vectorM,
                     colorscale=c("rgb(244, 244, 244)","rgb(65, 65, 65)"),
                     showscale=TRUE,
                     line=list(width=2,color='DarkSlateGrey')))
        
figfactor <- figfactor %>% add_markers()
figfactor <- figfactor %>% layout(scene = list(xaxis = list(title = 'x-value [mm]'),
                                   yaxis = list(title = 'y-value [mm]'),
                                   zaxis = list(title = 'z-value [mm]')),
                      annotations = list(
                        x = 1.06,
                        y = 1.03,
                        text = 'factor',
                        xref = 'paper',
                        yref = 'paper',
                        showarrow = FALSE
                      ))
figfactor

3D散点图

我以为我已经把所有颜色都改成了灰色,但是图中仍有颜色。 如何更改呢?此外: - 为什么缩放比例不是灰色的,如何创建灰色比例尺? - 如何在右侧标尺上方描边显示“factor”? - 为什么会出现 'trace 0' 和 'trace 1'?

如何在这张图中画两个圆,可以通过画图或使用圆的公式来实现?

谢谢


你的问题几乎无法阅读。请编辑问题并修复任何缺失的代码部分。 - Oliver
1
question is editted - Jan
非常好,答案已经提供。 :-) - Oliver
1个回答

4
散点图标记颜色文档中可以看出问题在于颜色以错误的格式给出。请注意下面粗体部分的说明。
设置颜色比例尺,只有当marker.line.color设置为数字数组时才有效。颜色比例必须是包含数组的数组,将规范化值映射到rgb、rgba、hex、hsl、hsv或命名颜色字符串。最少需要一组映射表示最低(0)和最高(1)值。例如:[[0,'rgb(0,0,255)'],[1,'rgb(255,0,0)']] 。要控制颜色空间中颜色范围的边界,请使用marker.line.cminmarker.line.cmax。或者,colorscale可以是以下列表中的调色板名称字符串:
Greys、YlGnBu、Greens、YlOrRd、Bluered、RdBu、Reds、Blues、Picnic、Rainbow、Portland、Jet、Hot、Blackbody、Earth、Electric、Viridis、Cividis。
R中,数组可以使用array创建,也可以作为列表的列表(或向量的列表)创建。因此我们可以通过两种方式获得完全灰色着色:
1. 设置colourscale='Greys' 2. 将您的向量重新映射为向量的列表。
mtcars数据为例,可以这样做:
data(mtcars)
library(plotly)
plot_ly(mtcars, x = ~hp, y = ~cyl, z = ~mpg,
       type = 'scatter3d', mode = 'markers',
       marker = list(color = ~ hp,
                     # Use either a named palette in the above list:
                     #colorscale = 'Greys',
                     # Or use a list of vector scales.
                     colorscale = list(c(0, rgb(55, 55, 55, max = 255)), 
                                       c(1, rgb(244, 244, 244, max = 255))),
                     showscale = TRUE))

请注意,line参数是不必要的,除非您想在点之间特别添加线条,并且您列表的顺序很重要(例如,c(0, ...)应始终位于c(1, ...)之前)。

谢谢,我现在已经有了灰度图像。 - Jan
另一个相关的问题:我能创建三个这样的图形并将它们合并为一个图形吗(将三个图形并排放置在一起)? - Jan
你正在寻找subplotsfacets(可能只在Python中可用)。请记得通过点击上箭头和勾号来点赞并将答案标记为“答案”,以增加可见性并帮助其他人在未来找到他们问题的答案。 :-) - Oliver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接