在散点图分散中更改颜色

时间:2020-08-04 17:06:44

标签: r plotly scatter3d

我在R中使用plotly创建了以下3d散点图。 为此,我使用了以下代码 数据setTxy仅包含每个标记的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 scatterplot

我以为我将所有颜色都更改为灰色,但是情节中仍然有collor。 我该如何更改?进一步: -为什么缩放比例不是灰色的;我该如何创建呢? -如何在右边的比例尺上方勾画出“因素” -为什么我有“迹线0”和“迹线1”?

如何通过绘制图形或使用圆的公式在此图形中绘制两个圆?

谢谢

1 个答案:

答案 0 :(得分:0)

根据文档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可以是以下列表的调色板名称字符串:

  • 灰色,YlGnBu,绿色,YlOrRd,Bluered,RdBu,红色,蓝调,野餐,彩虹,波特兰,喷射,热,黑体,地球,电,Viridis,Cividis。

R中,使用array创建数组或将其作为列表(或向量列表)的list。因此,我们可以通过两种方式获得全灰色的颜色:

  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参数是不必要的,并且列表的 order 确实很重要(例如c(1, ...)应该始终之后 c(0, ...))。