You need to enable JavaScript to run this app. Matplotlib绘图报错:x和y维度不匹配,形状为(1,)和(12,)如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 22:06:04