在plotly scatter3D中改变颜色

Posted

技术标签:

【中文标题】在plotly scatter3D中改变颜色【英文标题】:changing colors in plotly scatter3D 【发布时间】:2020-11-24 20:09:58 【问题描述】:

我在 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

我以为我将所有颜色都更改为 gray ,但情节中仍有颜色。 我怎样才能改变这个?进一步: -为什么缩放不是灰色的;我怎样才能创造这个? - 我如何在右侧标度上方勾勒出“因素” -为什么我有'trace 0'和'trace 1'?

如何在这个图中画出两个圆,要么在图中画,要么用圆的公式?

谢谢

【问题讨论】:

您的问题几乎无法阅读。请编辑问题并修复任何缺失的代码部分。 问题已编辑 好多了。已提供答案。 :-) 【参考方案1】:

来自文档scatter-marker-color 的问题是颜色的格式错误。请注意下面粗体标记的部分

设置色阶。只有在 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 创建,要么作为列表(或向量列表)的list 创建。因此,我们可以通过两种方式获得全灰色:

    设置colourscale = 'Greys' 将向量重新映射到向量列表。

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(1, ...) 应该总是出现 之后 c(0, ...))。

【讨论】:

谢谢,我现在有灰色的图了。 另一个相关问题:我可以创建三个这样的图并将它们组合成一个图(让三个图彼此相邻? 您正在寻找subplots 或facets(可能仅在python 中可用)。请记住通过单击向上箭头和复选标记来投票并将答案标记为“答案”,以提高知名度并帮助其他人在未来找到他们问题的答案。 :-)

以上是关于在plotly scatter3D中改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue 上使用带有 Webpack 的 plotly.js 3d scatter3d

如何更新第二个绘图轴 plotly Scatter3D subplots

如何使用场景向 scatter3D Plotly 绘图添加注释?

R语言使用car包的scatter3d函数可视化可以交互旋转的3D散点图(Spinning 3D scatter plot by the scatter3d() function of car)

Plotly js中的高效3D线图?

Python随着时间的推移在Scatter3d中绘制动画标记样式或点