条形图的绘图颜色从一个条形图更改为下一个

时间:2021-03-05 11:13:31

标签: python plotly colorbar

我正在绘制几个条形图来说明不同大学不同类型讲座的频率。我将来自不同大学的讲座编码为不同的类别(例如,市场营销、数据科学、经济学等)。我正在为每所大学绘制一张图表,其中每个条形图都是一个堆叠条形图,其中包含不同类别的频率),而且大多数大学都有不止一个条形来反映不同的学位课程。

现在我的主要问题是我希望始终使用相同的颜色来反映相同类型的类别,以便条形图易于比较。然而,我现在遇到的问题是 plotly 似乎将颜色随机分配给预定义的类别,例如,在大学 X 的一个输出中,橙色表示类别“营销”,而另一所大学橙色的输出中表示“数据科学” ”。

这是我的代码:

1.在学位课程(=Studiengang)级别创建具有频率计数的新列

freq = pd.DataFrame({'count' : df.groupby( ["Uni", "Studiengang", "Codierung"] ).size()}).reset_index()

绘制大学 1 的条形图

HSG = freq[freq.Uni == "HSG"]
total = []
length = []

for x in HSG.Studiengang:
    length.append(len(x))
    total.append(HSG[(HSG.Studiengang == x)]['count'].sum())
HSG['Total']=total

HSG['Percentage'] = HSG['count'] / HSG['Total']*100

fig = px.bar(HSG, x="Studiengang", y='Percentage', labels={"Codierung": "Codierung",  "Studiengang": "Studiengänge", "count": "Anzahl"}, color="Codierung", title="HSG")
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[2]))
fig.for_each_trace(lambda t: t.update(name=t.name.split("=")[2]))
fig.show()

另一所大学完全相同的程序:

total = []
length = []

for x in HSLU.Studiengang:
    length.append(len(x))
    total.append(HSLU[(HSLU.Studiengang == x)]['count'].sum())
HSLU['Total']=total

HSLU['Percentage'] = HSLU['count'] / HSLU['Total']*100

fig = px.bar(HSLU, x="Studiengang", y='Percentage', labels={"Codierung": "Codierung",  "Studiengang": "Studiengänge", "count": "Anzahl"}, color="Codierung", title="HSLU")
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[1]))
fig.for_each_trace(lambda t: t.update(name=t.name.split("=")[1]))
fig.show()

比较两个输出,您会发现颜色编码不同: University 1 University 2

我已经尝试通过“Codierung”对 df 进行排序。然而,问题仍然存在,因为并非所有大学都存在所有“代码”。有什么方法可以在绘制条形图之前为特定代码分配颜色,以便管理始终为绿色,而数据科学始终为蓝色,......?

一个不太令人满意的解决方法是只为每所大学附加特定代码的频率计数为 0 的行。然而,这给我留下了一个没有显示在条形图中的图例项。

我还尝试为我的数据调整此代码:Plotly assigning colors based on label 但是没有成功。

感谢您的帮助:)

0 个答案:

没有答案