Python - plotly 根据标签分配散点图颜色

4
我试图在 Plotly Python 中复制 Plotly R 的基本示例之一,但发现这是不可能的。
同样的问题在 R 中也得到了解决: 基于标签分配颜色的 Plotly 示例
trace0 = go.Scatter( x = x1, y = y1, mode = 'markers',
                    name = ytitle +  ' X vs ' + Atitle, 
                    marker=dict(size=4, symbol='circle', 
                                color=colorsIdx, colorbar= go.ColorBar(title= 'colorbar'),
                            colorscale='Viridis')
                    )

最接近的方法是使用色条,但这是次优的,因为我无法弄清楚如何选择颜色,使它们不会混合在一起,然后颜色图例会使图形看起来像有一些连续数据正在进行,而实际上并非如此。
1个回答

16

使用字典将颜色进行映射:

import pandas as pd 
import plotly.plotly as py
import plotly.graph_objs as go

d  = {'x': [1, 2, 3], 'y': [3, 4, 5], 'z': ['A', 'B', 'A']}
df = pd.DataFrame(data=d)

colorsIdx = {'A': 'rgb(215,48,39)', 'B': 'rgb(215,148,39)'}
cols      = df['z'].map(colorsIdx)

# Create a trace
trace = go.Scatter(
    x = df.x,
    y = df.y,
    mode = 'markers',
    marker=dict(size=15, color=cols)
)

data = [trace]
py.iplot(data)

enter image description here


2
我不太清楚这个。我有一个带有十几个不同级别的pandas数据框。我真的需要为每个级别手动设置颜色吗? - mic
3
@mic中的colorsidx是一个字典,因此您可以创建一个字典推导式并使用random()函数或range()函数来分配颜色。这将迭代可用标签并按顺序或随机方式分配颜色。简要思路:{i:k for i in df.columns for k in range(len(df.columns))} - Info5ek
@Info5ek 哎呀!你说得对,我总是忘记使用推导式...谢谢! - mic
2
我来到这里是因为我正在解决一个类似的问题。我在下面分享我的代码,它能够随机生成N种颜色,并使用字典推导将它们分配给你的P个类别。https://github.com/PortWhisperer/MachineLearningStudies/blob/f3c10a4011f1c3fa5effd1d5836e4d928b643066/src/HW2NO4.py#L124-L136 - Info5ek

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