Matplotlib绘图报错:x和y维度不匹配,形状为(1,)和(12,)如何解决?
问题根源
你在chrt函数中出现了变量名冲突:
- 最开始你定义了
x = np.array([1,2,3,4,5,6,7,8,9,10,11,12]),这是长度为12的数组 - 后续循环语句
for x in range(12)直接覆盖了这个x变量,循环结束后x的值是整数11,仅单个维度,所以和长度为12的y绘图时触发维度不匹配报错。
修复方案
基础修复(仅解决冲突)
把内层循环的变量名改成其他不冲突的名字,比如m:
def chrt(self): x = np.array([1,2,3,4,5,6,7,8,9,10,11,12]) y = np.array([0,0,0,0,0,0,0,0,0,0,0,0]) wb = openpyxl.load_workbook(filename) sh = wb.get_sheet_by_name('data') cnt = sh.max_row for rows in range(1, cnt): cell = 'b' + str(rows) tmp = sh[cell].value # 循环变量改为m,避免覆盖外层的x数组 for m in range(12): if tmp == m: y[m-1] += 1 print(y) print(len(y)) plt.plot(x,y) plt.xlabel('Month') plt.ylabel('count') plt.title('Tracker') plt.show()
优化修复(简化逻辑同时解决问题)
统计月份计数不需要嵌套循环,直接用tmp作为下标修改y即可,还能解决原有逻辑匹配不到12月记录的问题:
def chrt(self): x = np.array([1,2,3,4,5,6,7,8,9,10,11,12]) y = np.array([0,0,0,0,0,0,0,0,0,0,0,0]) wb = openpyxl.load_workbook(filename) sh = wb.get_sheet_by_name('data') cnt = sh.max_row for rows in range(1, cnt): cell = 'b' + str(rows) tmp = sh[cell].value # 直接判断月份范围后修改对应下标的计数 if 1 <= tmp <= 12: y[tmp-1] += 1 print(y) print(len(y)) plt.plot(x,y) plt.xlabel('Month') plt.ylabel('count') plt.title('Tracker') plt.show()
内容的提问来源于stack exchange,提问作者mjbrault0319
相关产品推荐
相关产品推荐

