Pandas图,matplotlib,绘制堆叠条形图

iqih9akk  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(205)

我有这样一个 Dataframe :

Names   loc.items
Name1   343 1756
Name2   5   15
Name3   688 1667
Name4   88  444
Name5   1   1
....
Name99  22  111

很容易得到一个堆叠的条形图,其中名称在x轴上,堆叠的条形图在每个名称上。
我想反过来做。我想用两个堆叠的条形图,其中99个堆叠(名字在里面)来表示位置和项目。就像表格本身一样。每个名字(x)的堆叠对的厚度都是位置(x)和项目(x)。我怎么做这个图表?
这一点:

myclist[[ myclist.loc[:,"names"]]].plot(x='carrier', kind='bar', stacked=True)

或者这种方法

# plot data in stack manner of bar type
df.plot(x='Carrier', kind='bar', stacked=True,
        title='Stacked Bar Graph by dataframe')
plt.show()

不工作。如果数据框看起来像下面,它会工作。但写(手动)为系列'位置'和'项目'和单独的'列'它的工作。我认为它应该是一样的事情,但它似乎不是这样:

df = pd.DataFrame([['location', 10, 20, 10, 26], ['items', 20, 25, 15, 21]],
                  columns=['Names', 'Name1', 'Name2','Name3', 'Name99'])

enter image description here

xmakbtuz

xmakbtuz1#

这是可能的,但我认为有很多行,所以100行的输出是不可读的:

df.set_index('Names').T.plot(kind='bar', stacked=True)

一个可能的想法是过滤器名称,这里介于Name1Name4之间:

df.set_index('Names').loc['Name1':'Name4'].T.plot(kind='bar', stacked=True)
lx0bsm1f

lx0bsm1f2#

import pandas as pd
import matplotlib.pyplot as plt

# Create a dataframe with the original data
df = pd.DataFrame({'Names': ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', ..., 'Name99'],
                   'loc': [343, 5, 688, 88, 1, ..., 22],
                   'items': [1756, 15, 1667, 444, 1, ..., 111]})

# Reshape the dataframe to have columns for each name and rows for location and items
df_stacked = df.set_index('Names').stack().reset_index()
df_stacked.columns = ['Names', 'Type', 'Value']

# Plot the stacked bar chart
df_stacked.plot(x='Names', y='Value', kind='bar', stacked=True, title='Stacked Bar Chart')
plt.show()

相关问题