Plotly:如何自定义图例?

3
我已经自定义了使用plotly绘制的数据点的颜色。数据点的颜色是基于与其相关联的标签分配的。 但是,在设置legend=True之后,字典中定义的三种颜色都没有在图中显示。
我希望:
'a': 'rgb(147,112,219)(the actual color in here)',
'b': 'rgb(220,20,60)',
'c': 'rgb(0,128,0)'

将显示在绘图的右上角。

import pandas as pd
import plotly  as plotly
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot


label = ['a', 'b', 'a', 'b', 'c']
label_df = pd.DataFrame({'color': label})

color = {'a': 'rgb(147,112,219)',
         'b': 'rgb(220,20,60)',
         'c': 'rgb(0,128,0)'
        }

cols = label_df['color'].map(color)

data = [
    go.Scatter(
        x=[1, 2, 3, 4, 5],
        y=[1, 2, 3, 4, 5],
        mode='markers',
        marker=dict(size=10, color=cols)
    )
]
layout = go.Layout(
    hovermode='y',
    showlegend=True,
    barmode='stack',
    title='plot'
)

fig = go.Figure(data=data, layout=layout)
plot(fig, filename='plot.html')

任何关于如何在图中显示自定义图例的建议?
这是代码片段生成的图形:

enter image description here

1个回答

3

图例的外观和结构设计旨在反映您的图形内容。您所要实现的目标非常可能,但在我看来最好用稍微不同的方式来完成。如果您想让所有a标签都具有颜色'rgb(147,112,219)',并且您有多个a的观察结果,则只需构建您的图形以显示确切的内容,以使图例有意义。通常,每个跟踪都有一个图例元素。而您只有一个跟踪。您和我的方法之间的主要区别是我为每个唯一标签添加了一个跟踪。下面的代码片段将为您提供以下绘图,我理解这是您期望的结果:

enter image description here

完整代码:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({'label': ['a', 'b', 'a', 'b', 'c'],
                   'x': [1, 2, 3, 4, 5],
                   'y': [1, 2, 3, 4, 5]})

color = {'a': 'rgb(147,112,219)',
         'b': 'rgb(220,20,60)',
         'c': 'rgb(0,128,0)'}

fig = go.Figure()
for lbl in df['label'].unique():
    dfp = df[df['label']==lbl]
    #print(dfp)
    fig.add_traces(go.Scatter(x=dfp['x'], y=dfp['y'], mode='markers',
                             name=lbl,
                             marker = dict(color=color[lbl], size = 12)
                             ))

fig.show()

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