创建图形后破折号更新颜色

Dash update colors after figure is created

如果我像这样创建一个情节表达的图形:

fig = px.line(data, color_discrete_map={"Gold": "gold","Silver": "silver"}),

它工作正常。

但是如果我想在创建图形后更新颜色,就像这样:

fig = px.line(data)
fig.update_layout(color_discrete_map={"Gold": "gold", "Silver": "silver"})

我明白了

AttributeError: 'Figure' object has no attribute 'color'

我也试过 update_traces() 但没有成功。

请问正确的做法是什么?

当您使用 plotly.express 创建图形时,您会收到一个 plotly.graph_objs 图形。 您可以传递参数 color_discrete_map,它在 express figure 的构造函数中用于设置不同线条的颜色,但之后您只能通过它们的 plotly.graph_objects 属性来更改它们。

当你这样做时,它变得更加清晰:

fig1 = px.line(data, color_discrete_map={"Gold": "gold","Silver": "silver"})
fig2 = px.line(data)
print(fig1)
print(fig2)

您必须更改相应行的 line_color 属性。一个解决方案可能是这样做:

import plotly.express as px
import pandas as pd

data = pd.DataFrame({"Gold":[1, 2, 3], "Silver":[2, 1, 3]})
fig = px.line(data)

colors = {"Gold":"gold", "Silver":"silver"}
for linename, linecolor in colors.items():
    for figline in fig.data:
        if figline.name == linename:
            figline.line.color = linecolor

fig.show()