如何使用ggplot创建堆叠条形图?附数据集与可视化需求
实现堆叠条形图展示列中0和1的占比
嘿,这事儿不难!用Python的pandas和matplotlib就能轻松搞定,我给你写好完整代码和解释,直接抄过去就能运行:
步骤1:导入必要的库
先把需要用到的数据分析和绘图库导入进来:
import pandas as pd import matplotlib.pyplot as plt
步骤2:加载你的数据集
把你提供的数据集转换成DataFrame格式,方便后续处理:
# 创建数据集 data = { 'A': [1, 0, 1, 1], 'B': [1, 1, 0, 0], 'C': [1, 1, 1, 1] } df = pd.DataFrame(data)
步骤3:计算每列0和1的占比
对每列统计0和1的占比,转置后让结构更适配堆叠条形图的需求:
# 计算每列0和1的占比,转置后行是列名,列是0/1的占比 proportion_df = df.apply(lambda x: x.value_counts(normalize=True)).T.fillna(0)
解释:value_counts(normalize=True)会计算每个值在列中的占比,T转置后把列名(A/B/C)变成行索引,fillna(0)是为了处理像C列这种没有0的情况,自动把0的占比设为0,避免报错。
步骤4:绘制堆叠条形图
接下来就是画图了,我还加了数值标签、标题和清晰的配色,让图表更直观:
# 设置一个好看的绘图风格 plt.style.use('seaborn-v0_8') # 绘制堆叠条形图 ax = proportion_df.plot(kind='bar', stacked=True, figsize=(8, 5), color=['#636EFA', '#EF553B']) # 添加标题和坐标轴标签 plt.title('Proportion of 0s and 1s in Each Column', fontsize=14) plt.xlabel('Columns', fontsize=12) plt.ylabel('Proportion', fontsize=12) # 设置图例,明确哪个颜色对应0/1 plt.legend(title='Value', loc='upper right', labels=['0', '1']) # 给每个堆叠部分添加数值标签,显示具体占比 for container in ax.containers: ax.bar_label(container, fmt='%.2f', label_type='center') # 调整布局,防止标签被截断 plt.tight_layout() # 显示图表 plt.show()
运行这段代码后,你会得到一个并排的堆叠条形图:每一根条形对应A/B/C列,条形的两部分分别代表0和1的占比,还会显示具体的数值(比如A列0的占比是0.25,1的占比是0.75;C列0的占比是0,1的占比是1.0)。
内容的提问来源于stack exchange,提问作者Sajjad
相关产品推荐
相关产品推荐

