Matplotlib绘图报错ValueError:x与y维度不匹配求助
问题分析与解决
错误原因
你遇到的ValueError核心问题是y轴数据维度不匹配:
- 每次循环里你把
h初始化为空列表,然后append了一个长度为10000的numpy数组,最终h的结构是[array([...])],也就是形状为(1, 10000)的二维结构。 - 而
E是形状为(10000,)的一维数组,plt.plot要求x和y的第一维度必须一致,因此触发报错。 - 另外你的代码没有实现「对n从0到5的函数求和」的需求,只是循环生成了每个n对应的函数值,但没有累加,最后只保留了最后一次循环的结果。
修正后的代码
import matplotlib.pyplot as plt import numpy as np E = np.linspace(0, 10, 10000) total_h = np.zeros_like(E) # 初始化求和用的数组,和E维度一致 plt.figure(figsize=(10,6)) for n in range(0, 6): # 直接计算当前n对应的函数值,得到和E同维度的一维数组 h_n = 1/(1 + np.exp(-2*np.pi * (E-(n-0.5)*3))) total_h += h_n # 累加每个n的函数值 plt.plot(E, h_n, label=f'n={n}') # 绘制单个阶跃函数 # 绘制求和后的总结果 plt.plot(E, total_h, label='所有n的求和结果', linewidth=2, color='black') plt.xlabel('E') plt.ylabel('h(E)') plt.title('多阶跃函数及求和结果') plt.legend() plt.grid(True) plt.show()
关键修正点
- 维度匹配:直接用numpy数组计算每个n对应的
h_n,它的形状和E完全一致(都是(10000,)),避免了列表嵌套导致的维度问题。 - 实现求和:新增
total_h数组,循环中累加每个h_n,最终得到所有n对应的函数求和结果。 - 可视化优化:添加了图例、坐标轴标签、网格等,让图表更易读;同时可以选择绘制每个单独的阶跃函数,方便对比。
内容的提问来源于stack exchange,提问作者jimmymac
相关产品推荐
相关产品推荐

