如何为Pandas DataFrame的各索引值绘制独立子图?
给DataFrame每个索引行绘制独立子图的解决方案
嘿,作为Pandas新手碰到这个需求完全没问题,我来给你一步步拆解怎么实现~
第一步:先构造你的示例DataFrame
首先我们先把你给出的示例数据转换成Pandas DataFrame,方便后续操作:
import pandas as pd import matplotlib.pyplot as plt # 构造数据 data = { 'col1': [264296, 401876, 852574], 'col2': [32413, 27045, 51447], 'col3': [80984, 418732, 8720], 'col4': [1286, 3287, 138329], 'col5': [338, 162815, 1160], 'col6': [31, 771, 1960], 'col7': [564, 362553, 246], 'col8': [669, 6648, 1014] } # 设置你给出的字符串索引 index_labels = ['ANDAMAN & NICOBAR ISLANDS', 'ARUNACHAL PRADESH', 'CHANDIGARH'] df = pd.DataFrame(data, index=index_labels)
第二步:循环生成每个索引的独立子图
接下来我们利用Matplotlib创建对应数量的子图,然后遍历DataFrame的每一行,在对应的子图上绘制图表:
# 根据索引数量创建子图布局,这里用3行1列的布局,你也可以改成1行3列(ncols=3, nrows=1) fig, axes = plt.subplots(nrows=len(df), ncols=1, figsize=(10, 15)) # 遍历每一行,同时拿到索引标签和行数据 for idx, (row_label, row_data) in enumerate(df.iterrows()): # 获取当前子图 current_ax = axes[idx] # 绘制柱状图(你可以改成kind='line'画折线图,或者其他支持的类型) row_data.plot(kind='bar', ax=current_ax) # 设置子图标题,用索引标签命名 current_ax.set_title(f'Data for {row_label}', fontsize=12) # 设置坐标轴标签 current_ax.set_xlabel('Column Names', fontsize=10) current_ax.set_ylabel('Values', fontsize=10) # 旋转x轴标签,避免文字重叠 current_ax.tick_params(axis='x', rotation=45) # 自动调整子图间距,避免标题、标签重叠 plt.tight_layout() # 显示图表 plt.show()
小提示
- 如果你想更换图表类型,只需要修改
plot()方法里的kind参数,比如kind='line'(折线图)、kind='pie'(饼图)都可以 - 子图布局可以根据你的需求调整,比如把
nrows=len(df), ncols=1改成nrows=1, ncols=len(df),就能把所有子图排成一行 - 如果你的DataFrame列名有实际含义,可以把代码里的
col1-col8换成真实的列名,图表会更直观
内容的提问来源于stack exchange,提问作者Abhinav Dixit
相关产品推荐
相关产品推荐

