为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2023-05-16 14:31:23
我试图在制造商不透明度被某些矢量改变的地方绘制标记。但标记边缘颜色不透明度是恒定的。   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)')}                            ))从下图中可以看出,标记边缘颜色不透明度与标记填充的颜色不透明度一起改变。我的目的是保持线(标记边缘)不透明度不变。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

您可以轻松地在 0 和 1 之间重新缩放 pandas 系列,并将其用作参数, rgba(red,green,blue,opacity)例如图中某个标记的不透明度在 0 和 1 之间color='rgba(100,0,255,'+opac+')'opac标记的颜色属性对于任何 都是唯一的go.Scatter(),因此您必须为每个点添加一个唯一的轨迹。然后,同时,您可以为标记的轮廓设置颜色(如果您愿意的话,还可以设置不透明度)使用marker=dict(line=dict(color='rgba(100,0,255,1)'))

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

//img3.sycdn.imooc.com/6463235c0001180c06580266.jpg

但是你也可以设置一个定义更明确的行,例如,line=dict(color='rgba(0,0,0,1)', width = 2)得到这样的东西:

//img3.sycdn.imooc.com/64632367000192b106530266.jpg

现在您可以尝试所有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()

编辑: Hoverinfo 的副作用


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


fig.update_layout(hovermode="x")

fig.update_traces(hoverinfo = 'x+y')

//img2.sycdn.imooc.com/64632374000131a306560282.jpg

查看完整回答
反对 回复 2023-05-16
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信