[英]Stacked Bar Chart in Matplotlib
我正在嘗試在 Matplotlib 中創建堆疊條形圖。 我使用 Pandas 創建了一個簡單的,但我現在對 Matplotlib 感興趣,但無法使其工作。
我的資料
ShiftType ShiftNumber cnt
0 Non-Standard 1.0 154478
1 Non-Standard 2.0 140421
2 Non-Standard 3.0 159990
3 Standard 1.0 211100
4 Standard 2.0 198652
5 Standard 3.0 190857
使用 Pandas 工作的代碼。
df.groupby(by=['ShiftType','ShiftNumber']).size().rename('cnt').unstack().plot(kind='bar', stacked=True)
plt.legend(title='Shift Numbers', bbox_to_anchor=(1.0, 1), loc='upper left')
我怎樣才能基於 Matplotlib 得到這個?
您提供的示例代碼沒有准確計算總和。 “在 Matplotlib 中創建堆疊條形圖”的含義也有些不清楚,因為您調用的 Pandas plot() 函數是 matplotlib 集成。 無論如何,作為標准(也可能是最佳)實踐,我經常使用圖形和軸來設置我的繪圖。 這允許仔細控制我認為你在這里嘗試做的情節。
我建議將此代碼作為您問題的解決方案和進一步繪圖操作的起點。
fig, ax = plt.subplots()
df.groupby(['ShiftType', 'ShiftNumber']) \
['cnt'].sum() \
.reset_index() \
.pivot_table(index='ShiftType', columns='ShiftNumber', values='cnt') \
.plot(kind='bar', stacked=True, ax=ax)
ax.legend(title='Shift Numbers', bbox_to_anchor=(1.0, 1), loc='upper left')
然后我會添加一些每個圖表都應該有的標准功能,例如一個 y 標簽和一個標題。
ax.set_ylabel('cnt')
ax.set_title('Count of Shift Types')
結合這些,你將得到這個最終的情節。
可能有一些更緊湊的,但這里有一個解決方案。 這是你的 df
ShiftType ShiftNumber cnt
0 Non-Standard 1.0 154478
1 Non-Standard 2.0 140421
2 Non-Standard 3.0 159990
3 Standard 1.0 211100
4 Standard 2.0 198652
5 Standard 3.0 190857
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
fig, ax = plt.subplots(figsize=(10,7))
m = df['ShiftNumber'].drop_duplicates()
margin_bottom = np.zeros(len(df['ShiftType'].drop_duplicates()))
colors = ["#006D2C", "#31A354","#74C476"]
for num, m in enumerate(m):
values = list(df[df['ShiftNumber'] == m].loc[:, 'cnt'])
df[df['ShiftNumber'] == m].plot.bar(x='ShiftType',y='cnt', ax=ax, stacked=True,
bottom = margin_bottom, color=colors[num], label=m)
margin_bottom += values
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.