在Plotly中,在组中使用色标时如何为图例点选择特定颜色?

问题描述 投票:0回答:2

我正在 Plotly 中绘制 3d 散点图,类似于下面的示例。 (尽管在实际图中,我在各个图层中绘制了更多数据组,因此图例中有多个条目。)我必须将色标中的颜色添加到每组点。这会带来不幸的副作用,即导致图例中散点中的颜色本质上是该色阶中的随机颜色,而不是指定的颜色(例如,在较暗的一端)。要看到此效果,请更改

_ = nprand.sample(1)
行中的数字几次,您应该会看到图例点中的蓝色阴影发生变化。

import plotly.graph_objects as go
import numpy as np
import numpy.random as nprand

nprand.seed(1)
x = nprand.sample(100)
y = nprand.sample(100)
z = nprand.sample(100)
_ = nprand.sample(1)
color = nprand.sample(100)

trace = go.Scatter3d(x=x,
                     y=y,
                     z=z,
                     name="sample",
                     mode='markers',
                     marker=dict(
                         symbol='circle',
                         size=20,
                         color=color,
                         colorscale="Blues"))

fig = go.Figure(trace)
fig.update_layout(showlegend=True, legend=dict(bordercolor='black', itemwidth=100))
fig.show()

如何为图例中的点指定特定颜色?

python plotly
2个回答
0
投票

我迟到了,但为了补充维斯特兰的解决方法: 您可以将数据的第一个元素复制到数组的开头,因此前 2 个元素是相同的。 将第一个元素的颜色设置为您喜欢的任何值,以提高图例中标记的可见性。 然后,第二个元素将绘制在第一个元素上,完全覆盖它,因此在绘图的最后,您将看不到用于标记的第一个元素。 我希望我的建议是明确的,我尝试过这种方式并且效果很好。


-1
投票

一般来说,图例元素的标题和颜色反映了它们所代表的迹线的属性。因此,如果您有

blue
轨迹,您将获得
blue
图例。 在您此处描述的情况下,图例的颜色会有所不同,因为与特定值关联的颜色会有所不同。这个特定的值似乎是第一个元素:

fig.data[0].marker.color

示例内容:

array([0.8118587 , 0.87496164, 0.68841325, 0.56949441, 0.16097144,
       0.46688002, 0.34517205, 0.22503996, 0.59251187, 0.31226984,
       0.91630555, 0.90963552, 0.25711829, 0.1108913 , 0.19296273,
       0.49958417, 0.72858567, 0.20819444, 0.24803356, 0.85167187,
       0.41584872, 0.61668507, 0.23366614, 0.10196726, 0.51585702,
       0.47714099, 0.15267164, 0.62180623, 0.54401012, 0.65413735,
       0.14454554,

因此,在您的情况下,您可以将第一个元素设置为

1
以获得图例中较深的颜色。或者
0
在图例中获得更浅的颜色。当然,这种方法有很多缺点,但这就是它的工作原理。

黑暗
fig.data[0].marker.color[0] = 1

fig.data[0].marker.color[0] = 0

完整代码:

import plotly.graph_objects as go
import numpy as np
import numpy.random as nprand

nprand.seed(1)
x = nprand.sample(100)
y = nprand.sample(100)
z = nprand.sample(100)
# _ = nprand.sample(1)
color = nprand.sample(100)

trace = go.Scatter3d(x=x,
                     y=y,
                     z=z,
                     name="sample",
                     mode='markers',
                     marker=dict(
                         symbol='circle',
                         size=20,
                         color=color,
                         colorscale="Blues"))

fig = go.Figure(trace)
fig.update_layout(showlegend=True, legend=dict(bordercolor='black', itemwidth=100))
fig.data[0].marker.color[0] = 0

fig.show()
© www.soinside.com 2019 - 2024. All rights reserved.