Plotly:如何更改图例项目名称?

Har*_*riS 3 python plotly plotly-python

我想更改图例中项目的名称。下面是一个可重现的例子。

import plotly.express as px
df = px.data.iris()
colorsIdx = {'setosa': '#c9cba3', 'versicolor': '#ffe1a8',
             'virginica': '#e26d5c'}
cols      = df['species'].map(colorsIdx)

fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
              color=cols)
fig.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

因为我将自己的颜色分配给了我想重命名图例的物种,所以它不会显示为“#c9cba3”、“#ffe1a8”和“#e26d5c”。相反,我想成为“setosa”“versicolor”和“virginica”

ves*_*and 6

一般来说,您可以使用:

fig.for_each_trace(lambda t: t.update(name = newnames[t.name]))
Run Code Online (Sandbox Code Playgroud)

在您的情况下,newnames将是dict

{'#c9cba3': 'setosa', '#ffe1a8': 'versicolor', '#e26d5c': 'virginica'}
Run Code Online (Sandbox Code Playgroud)

并且您已经在 中指定了一个具有类似信息的字典colorsIdx,因此您只需要切换keysvalues使用:

newnames = {y:x for x,y in colorsIdx.items()}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,您应该知道这里还有更多内容!在 中px.scatter(),该color参数与实际颜色几乎没有关系,而是与 Pandas 数据框中的哪个变量相关,以寻找唯一值以分配颜色。看看当你改变你的时候会发生什么:

colorsIdx = {'setosa': '#c9cba3', 'versicolor': '#ffe1a8',
             'virginica': '#e26d5c'}
Run Code Online (Sandbox Code Playgroud)

...到:

colorsIdx = {'setosa': '#magic', 'versicolor': '#color',
             'virginica': '#function'}
Run Code Online (Sandbox Code Playgroud)

由于我最初的解释,您的示例图中的颜色非常相同:

在此处输入图片说明

要真正在你的情况下,使用指定的颜色color_discrete_map=dict(),并使用colorspecies变量。通过这种方式,您实际上可以定义所需的颜色,而不必重命名图例元素。

阴谋:

在此处输入图片说明

完整代码:

import plotly.express as px
df = px.data.iris()

fig = px.scatter_3d(df, x='sepal_length', y='sepal_width', z='petal_width',
              color='species',
              color_discrete_map={'setosa': 'steelblue', 
                                  'versicolor': 'firebrick',
                                  'virginica': 'green'})
fig.show()
Run Code Online (Sandbox Code Playgroud)