matplotlib 如何从具有百分比值的数据框创建堆叠百分比条形图

zd287kbt  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(159)

我有以下dataframe:

Class     Percentage
class1    0.215854
class2    0.12871
class3    0.122787
class4    0.0680061
class5    0.0670523
class6    0.0826716
class7    0.309828
class8    0
class9    0

我如何创建一个堆叠的垂直条形图,其中y从0到100%,并绘制百分比数据?我还想添加一个图例,颜色对应于一个类。
我试过的代码:

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

导致错误:TypeError: Empty 'DataFrame': no numeric data to plot

classgraph,texts = plt.bar(df["Percentage"],height=5) #added texts for later legend

给出错误:

Traceback (most recent call last):

  File "<ipython-input-71-894dc447893f>", line 1, in <module>
    classgraph,texts = plt.bar(dataframe_plot["Percentage"],height=5)

ValueError: too many values to unpack (expected 2)

我读了很多关于如何做到这一点的帖子,但我似乎无法弄清楚。

vawmfj5a

vawmfj5a1#

假设你有一个数据框

import pandas as pd
import seaborn as sns
sns.set_style("darkgrid")

data = {'Class': ['class1', 'class2', 'class3'],
        'mid-term': [345, 123, 74],
        'final':[235, 345, 632]}

df = pd.DataFrame(data)
df.head()

#    Class  mid-term    final
#0  class1  345       235
#1  class2  123       345
#2  class3  74        632

如果你把它画出来,结果会很混乱。

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

为了解决这个问题,你需要计算每一列的百分比,然后把它标出来。

df['mid-per'] = (df['mid-term'] / df['mid-term'].sum() * 100)
df['final-per'] = (df['final'] / df['final'].sum() * 100)

df.set_index('Class')[['mid-per', 'final-per']].T.plot(kind='bar', stacked=True)

相关问题