我正在 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()
如何为图例中的点指定特定颜色?
我迟到了,但为了补充维斯特兰的解决方法: 您可以将数据的第一个元素复制到数组的开头,因此前 2 个元素是相同的。 将第一个元素的颜色设置为您喜欢的任何值,以提高图例中标记的可见性。 然后,第二个元素将绘制在第一个元素上,完全覆盖它,因此在绘图的最后,您将看不到用于标记的第一个元素。 我希望我的建议是明确的,我尝试过这种方式并且效果很好。
一般来说,图例元素的标题和颜色反映了它们所代表的迹线的属性。因此,如果您有
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()