matplotlib 在python中绘制百分比条形图

flseospp  于 2022-11-30  发布在  Python
关注(0)|答案(1)|浏览(206)

我正在查看关于不同年级学生比例的信息,我试图避免使用饼图。相反,下面的样式似乎对我很有吸引力:

有没有办法在matplotlib或相邻的库中实现类似的可视化?我知道我可以使用barh()来表示水平条,但实际上理想的解决方案应该能够取消这里的轴,因为至少y轴在这里是不必要的。

b5buobof

b5buobof1#

你可以使用pandas.DataFrame.plot.barh来制作一个水平的单个堆叠条形图。在这个例子中,我使用了一个与你在Office of National Statistics中找到的数据集相似的数据集来向你展示一般逻辑。
试试这个:

import pandas as pd
import requests

url= "https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/populationandmigration/populationestimates/bulletins/annualmidyearpopulationestimates/mid2018/fa9e61d4.xlsx"

excel_file = requests.get(url)

ages_labels = ["0-14yrs", "15-64yrs", "65yrs+"]

def set_categories(df):
    df["Category"]= pd.qcut(x= df.pop("Age"), q=[0, 0.16, 0.73, 1], labels=ages_labels)
    return df

(
    pd.read_excel(excel_file.content, header=2, usecols="A:B")
        .apply(pd.to_numeric, errors="coerce")
        .dropna()
        .pipe(set_categories)
        .groupby("Category").sum()
        .transpose()
        .plot.barh(
            stacked= True,
            width= 0.1,
            color= ["#3d8881", "#2b7dc0", "#d2417e"],
            figsize=(7, 3))
)
#输出:

相关问题