Pandas与Matplotlib新手求助:绘制数组行/列均值关系图出错
问题排查与修正方案
你的代码存在几个关键问题,导致图表不符合预期:
核心问题分析
- 错误获取列数:
cols = df.count(axis=1)统计的是每行的非空值数量,不是数组的固定列数。数组的列数是df.shape[1],每行的列数都是这个固定值。 - 数据长度不匹配:列均值(
col_mean)的长度等于数组列数,行均值(row_mean)的长度等于数组行数,强行合并会导致大量缺失值,无法正常绘图。 - 索引设置错误:用每行非空值数作为DataFrame索引,完全不符合“X轴表示数组列数”的需求。
- 无用代码:
col_mean.tolist()和row_mean.tolist()仅转换为列表但未赋值,对后续逻辑无作用。
修正后的代码
import pandas as pd import matplotlib.pyplot as plt # 替换成你的目标数组 arr = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] df = pd.DataFrame(arr) # 计算列均值:X轴为列序号(1到总列数) total_cols = df.shape[1] col_mean = df.mean(axis=0) col_mean.index = col_mean.index + 1 # 将索引从0起始改为1起始,更符合列数直觉 # 计算行均值:所有行均值的X轴固定为数组总列数 row_mean = pd.Series( df.mean(axis=1).values, index=[total_cols] * len(df.mean(axis=1)) ) # 合并数据并绘图 dados = pd.DataFrame({ 'Colunas': col_mean, 'Linhas': row_mean }) lines = dados.plot.line(marker='o', figsize=(8,5)) plt.xlabel('数组的列数') plt.ylabel('均值') plt.title('行均值与列均值关系图') plt.grid(True) plt.show()
代码说明
- 列均值曲线:X轴为列的序号(1到总列数),Y轴为对应列的均值,展示各列均值的变化趋势。
- 行均值曲线:所有行均值的X轴固定为数组总列数,Y轴为对应行的均值,直观对比行均值与各列均值的差异。
- 若你实际需求是将行均值的X轴设为行号,只需修改
row_mean的索引:row_mean.index = df.index + 1,同时调整X轴标注为“行/列序号”即可。
内容的提问来源于stack exchange,提问作者byln
相关产品推荐
相关产品推荐

