Stacked Bar Charts with Python’s Matplotlib
Amint az várható volt, a diagram nehezen olvasható. Próbáljuk ki az egymásra helyezett oszlopdiagramot, és tegyünk hozzá néhány módosítást.
Először is, az ábrázolás előtt rendezhetjük az értékeket, így jobban érzékeljük a sorrendet, és könnyebben összehasonlíthatjuk a sávokat. Ezt a “Globális értékesítés” oszloppal fogjuk megtenni, mivel ez tartalmazza a teljes összeget.
## sort values
df_grouped = df_grouped.sort_values('Global_Sales')
df_grouped
![](https://miro.medium.com/max/60/1*duDK8pZK5IKc4qjXOKa8ag.png?q=20)
A korábbiakban a klaszterezett oszlopdiagram elkészítéséhez minden régióhoz egy ábrát használtunk, ahol a szélességi paraméter és az x-tengely kiigazítása segített abban, hogy az egyes platformok négy területére illeszkedjen.
Hasonlóképpen, a halmozott oszlopdiagramok ábrázolásához minden egyes régióhoz egy-egy plotot fogunk használni. Ezúttal a bottom/left paramétert fogjuk használni, hogy megmondjuk a Matplotlibnek, mi álljon az általunk rajzolt sávok előtt.
plt.bar(, )
plt.bar(, , bottom = )
plt.show()plt.barh(, )
plt.barh(, , left = )
plt.show()
![](https://miro.medium.com/max/44/1*6AugWnylOrhysTilFpJWMg.png?q=20)
Cool. Egy ciklus segítségével ábrázolhatjuk a sávokat, átadva egy nullákból álló listát az ‘bottom’ paraméterhez az első sorozatban, és felhalmozva a következő értékeket a következő régiókhoz.
fields =
colors =
labels = # figure and axis
fig, ax = plt.subplots(1, figsize=(12, 10))# plot bars
left = len(df_grouped) *
for idx, name in enumerate(fields):
plt.barh(df_grouped.index, df_grouped, left = left, color=colors)
left = left + df_grouped# title, legend, labels
plt.title('Video Game Sales By Platform and Region\n', loc='left')
plt.legend(labels, bbox_to_anchor=(), ncol=4, frameon=False)
plt.xlabel('Millions of copies of all games')# remove spines
ax.spines.set_visible(False)
ax.spines.set_visible(False)
ax.spines.set_visible(False)
ax.spines.set_visible(False)# adjust limits and draw grid lines
plt.ylim(-0.5, ax.get_yticks() + 0.5)
ax.set_axisbelow(True)
ax.xaxis.grid(color='gray', linestyle='dashed')plt.show()
![](https://miro.medium.com/max/60/1*C1iYEY7jXN_XLYphUWCy3w.png?q=20)
Nagyszerű, ez sokkal olvashatóbb, mint az előző.
Nem szabad elfelejteni ennek a diagramnak a célját, mielőtt megpróbálnánk bármilyen betekintést nyerni. Az ötlet itt az, hogy összehasonlítsuk a platformok összesített eladásait, és megértsük az egyes platformok összetételét.
A mezők közötti összegek összehasonlítása és a régiók összehasonlítása egy sávon belül rendben van. A különböző sávokból származó régiók összehasonlítása viszont nagyon félrevezető lehet.
Ez esetben az NA régiót össze tudjuk hasonlítani a sávok között, mivel minden sávban ugyanaz a kezdőpontja, de a többit nem olyan könnyű összehasonlítani. Vegyük például az X360-at, annak alacsonyabb a JP értéke, mint a PS2-nek, de nehéz összehasonlítani, hogy a Többiek értéke magasabb vagy alacsonyabb, mint a Wii-é.
![](https://miro.medium.com/max/60/1*j8BB7DapRI2P91nD2Bk_hA.png?q=20)
![](https://miro.medium.com/max/60/1*5mZMQDLSPB8zYIMBes5X4A.png?q=20)
Tegyük fel, hogy megváltoztatjuk a verem sorrendjét, úgy, hogy az Egyéb eladások legyen az első sáv, és a rekordokat az Egyéb eladások szerint rendezzük. Könnyebben meg kellene állapítani, hogy melyik a jelentősebb.
## sort values
df_grouped = df_grouped.sort_values('Other_Sales')fields =
colors =
labels =
![](https://miro.medium.com/max/60/1*Ok9-3fQC8VwAk8GI-1f2vg.png?q=20)
Ez a megjelenítés két lényeges elemet tartalmaz, a kategóriák sorrendjét az oszlophalmazban és a sorok sorrendjét.
Ha egy régiót szeretnénk kiemelni, akkor a rekordokat a kiválasztott mezővel rendezhetjük, és azt használhatjuk a bal szélső sávként.
Ha nem, akkor a rekordokat az összeg alapján is rendezhetjük, és a halmokat a magasabb értékkel rendelkező kategóriák szerint rendezhetjük elöl.