使用for循环与subplot2grid实现任意DataFrame全列可视化
解决方案
核心修改思路
- 移除硬编码的列数限制,动态获取DataFrame的总列数
- 根据实际列数自适应调整可视化布局,保留原有样式框架
- 遍历所有列进行渲染,不再仅展示前10列
修改后的示例代码
假设原代码基于matplotlib/seaborn实现填充式可视化,调整后的代码如下:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns def plot_filled_columns(df): total_cols = df.shape[1] # 按每行最多5列的逻辑,动态计算所需行数(向上取整) rows = (total_cols + 4) // 5 cols_per_row = min(total_cols, 5) # 保留原有样式配置 plt.figure(figsize=(cols_per_row*3, rows*2.5)) sns.set_style("whitegrid") # 遍历所有列生成可视化 for idx, col_name in enumerate(df.columns): plt.subplot(rows, cols_per_row, idx+1) # 保留原有填充式可视化逻辑(示例为累计面积图) df[col_name].cumsum().plot(kind='area', alpha=0.7, title=col_name) plt.tight_layout() plt.show() # 测试不同列数的情况 # 列数<10的DataFrame small_df = pd.DataFrame({f'col_{i}': range(10) for i in range(6)}) plot_filled_columns(small_df) # 列数≥10的DataFrame large_df = pd.DataFrame({f'col_{i}': range(10) for i in range(13)}) plot_filled_columns(large_df)
关键改动说明
- 动态列数适配:用
df.shape[1]获取总列数,替代原代码中硬编码的10 - 自适应布局:通过
rows = (total_cols + 4) // 5计算行数,确保任意列数都能合理排列子图,同时保持原有紧凑布局风格(可根据需求调整每行最大列数) - 全列渲染:循环
df.columns遍历所有列,不再限制仅展示前10列 - 样式保留:原有画布尺寸、主题风格、填充图逻辑完全保留,仅调整布局和列选择逻辑
内容的提问来源于stack exchange,提问作者grojar
相关产品推荐
相关产品推荐

