情节:如何设置不同的标记不透明度,但为所有标记保留相同的轮廓颜色? 完整代码:

问题描述

我正在尝试标记制造商不透明度因某些矢量而改变的标记

但是标记边缘颜色不透明度恒定

   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,1)')}
                            ))

在下面的图中可以看出,标记边缘的颜色不透明度随标记填充物的颜色不透明度而改变。

我的目的是保持线条(标记边缘)的不透明度恒定。

enter image description here

注意:此问题不能回答问题:

plotly.py: change line opacity,leave markers opaque

解决方法

您可以轻松地rescale a pandas series在0到1之间,并将其用作rgba(red,green,blue,opacity)中的参数,例如color='rgba(100,255,'+opac+')',其中opac对于某些标记在0到1之间有些不透明在你的形象。标记的color属性对于任何go.Scatter()都是唯一的,因此您必须为每个点添加唯一的迹线。然后,同时,您可以使用marker=dict(line=dict(color='rgba(100,1)'))

为标记的轮廓设置颜色(如果需要倾斜,可以设置不透明度)

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

enter image description here

但是您也可以使用line=dict(color='rgba(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,'+opac+')',line=dict(color='rgba(0,width = 2)))
                            )
    
fig.show()

编辑:Hoverinfo的副作用

只需包含以下内容即可编辑hoverinfo,以便将x和y值始终显示在鼠标悬停在closeset值上:

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