Plotly:如何设置不同的标记透明度,但保持所有标记相同的轮廓颜色?

7
我正在尝试在标记处设置标记器的透明度,该透明度由某些向量改变。
但标记的边缘颜色不透明度是恒定的。
   fig.add_trace(go.Scatter(x=real.index, y=real['some_value'],
                             mode='markers',
                             marker={'opacity': real['another value'],
                                     'color':'green',
                                     'size':10,
                                     'line':dict(width=1,
                                                 color='rgba(165,42,42,1)')}
                            ))


在下面的图中可以看到,标记边缘颜色的透明度会随着标记填充颜色的透明度一起改变。
我的目的是保持线条(标记边缘)的透明度恒定。

enter image description here

注意:这个问题并没有回答这个问题:

plotly.py:更改线条不透明度,保留标记的不透明度

1个回答

6

你可以轻松地将pandas系列(series)在0和1之间进行重新缩放, 并将其作为参数传递给rgba(红色,绿色,蓝色,不透明度),例如color='rgba(100,0,255,'+opac+')',其中opac是图形中某个标记的不透明度,在0到1之间。标记的颜色属性对于任何go.Scatter()都是独一无二的,因此您需要为每个点添加一个独特的追踪(trace)。同时,您还可以使用marker=dict(line=dict(color='rgba(100,0,255,1)'))设置标记的轮廓线条颜色(以及不透明度,如果您希望这样做)。

在下面的图中,我将轮廓颜色设置为'rgba(100,0,255,1)',并根据上述逻辑设置标记填充的不透明度。这样,最高值将显示为完全“填充”的标记:

enter image description here

但是你也可以使用更清晰定义的线条,例如line=dict(color='rgba(0,0,0,1)', width = 2),得到如下结果:

enter image description here

现在你可以尝试调整所有 rgba 参数,以找到你喜欢的颜色。

完整代码:

# imports
import plotly.graph_objects as go
import pandas as pd
import numpy as np

# sample data in the form of an hourlt
np.random.seed(1234)
tseries = pd.date_range("01.01.2020", "01.04.2020", freq="H")
data = np.random.randint(-100, 100, size=(len(tseries), 3))
df = pd.DataFrame(data=data)
df.columns=list('ABC')
df['C_scaled'] = df['C'].max()/df['C']
df['C_scaled'] = (df['C']-df['C'].min())/(df['C'].max()-df['C'].min())

df = df.sort_values(by=['C_scaled'], ascending=False)

fig=go.Figure()

for ix in df.index:
    d = df.iloc[ix]
    opac = str(d['C_scaled'])
    fig.add_trace(go.Scatter(x=[d['A']], y=[d['B']], showlegend=False,
                             marker=dict(size = 14, color='rgba(100,0,255,'+opac+')',
                                         line=dict(color='rgba(0,0,0,1)', width = 2)))
                            )
    
fig.show()

编辑:鼠标悬停信息的副作用

只需包含以下内容即可编辑悬停信息,以便始终在悬停时显示最接近的x和y值:

fig.update_layout(hovermode="x")
fig.update_traces(hoverinfo = 'x+y')


1
@MichaelD 这个循环做了很多事情,比如添加新的跟踪、设置颜色等,所以据我所知这不容易向量化。 - vestland
@MichaelD 问题 这个词可能更恰当一些。问题 1: 向量化。问题 2: “但它将边缘的透明度与标记填充的透明度一起改变”。 - vestland
我尝试了你的解决方案,它还不错。但是有一个“副作用”,它会将所有点添加到“悬停箱形图”中,而不仅仅是最接近“鼠标”的点。 - Michael D
1
@MichaelD 所有好的治疗方法都有副作用 =) 但也许我们也可以解决这个问题... - vestland
有没有办法添加一个连续的颜色图例来描述不透明度变化的含义? - Beolap
显示剩余6条评论

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