Plotly:更改图例标签并聚合数值

Plotly: Changing the legend labels and aggregating numerical values

这是我的代码:

fig = px.bar(
    data_frame=dftotal, 
    x="YEAR", 
    y="OPINION",
    title="Score des opinions par années", 
    color="OPINION", 
    width=1300, 
    height=700, 
    template='plotly_dark',
    color_discrete_map={5: "green",4: "lightgreen",3: "yellow",2:"orange", 1: "red", "inconnu": "grey"}
)

fig.update_layout(title_x=0.5)
fig.show()

它给出了这个结果:

但我想在 2014 年每年实现如下所示的结果。我认为,通过对每个值获得的“总分”求和。

我也想更改图例的标签名称。类似于:“非常糟糕”而不是“OPINION=1”。

  • 你没有提供样例数据,我模拟了一下
  • counts 你可以使用直方图,我选择使用 pandas value_counts() 来生成用于绘图的摘要数据框
  • 地图轨迹/图例名称。已使用 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html 从 1、2... 映射到“非常糟糕”、“糟糕”... 注意 fillna() 用于“inconnu”
  • 如果您想查看 OPINION
  • 的原始值,您也可以选择使用 hover_data=["OPINION"]
import pandas as pd
import numpy as np
import plotly.express as px

dftotal = pd.DataFrame({"YEAR":np.random.choice(range(2010,2021),10000), "OPINION":np.random.choice(range(1,6), 10000)})
dftotal.loc[dftotal.sample(200).index, "OPINION"] = "inconnu"
dfp = dftotal.value_counts().reset_index().rename(columns={0:"COUNT"}).sort_values(["YEAR","OPINION"])

fig = px.bar(
    data_frame=dfp, 
    x="YEAR", 
    y="COUNT",
    title="Score des opinions par années", 
    color=dfp["OPINION"].map({1:"very bad",2:"bad", 3:"ok",4:"good",5:"very good"}).fillna("inconnu"),
    # width=1300, 
    height=700, 
    template='plotly_dark',
    color_discrete_map={"very good": "green","good": "lightgreen","ok": "yellow","bad":"orange", "very bad": "red", "inconnu": "grey"}
)

fig.update_layout(title_x=0.5)