You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一图表绘制x轴不匹配的折线?解决维度不一致报错

解决折线图x/y维度不匹配问题

问题背景

需要绘制e_boix_regime取值为1(民主政体)和0(专制政体)时,SupDem变量随年份变化的折线图,但原代码运行时报错:x and y must have same first dimension, but have shapes (53,) and (28,),核心问题是筛选后的数据长度与总数据集的年份列长度不一致。

报错原因

原代码直接用整个数据集的year列作为x轴,但筛选得到的dem(仅包含regime=1的SupDem)和aut(仅包含regime=0的SupDem)行数远少于总数据集行数,导致x轴数组和y轴数组维度不匹配,无法完成折线绘制。

解决方案

提供两种可行修正方案,可根据数据需求选择:

方案1:按年份对齐数据(推荐用于统一年份轴的场景)

通过透视表按年份和政体类型聚合数据,确保每个年份对应两种政体的SupDem值(若同一年份有多个数据点,可选用均值/中位数等聚合方式),再绘制折线图:

import pandas as pd
import matplotlib.pyplot as plt

# 按年份和政体类型聚合SupDem,此处使用均值作为聚合方式
pivot_df = dem_aut.pivot_table(
    index='year',
    columns='e_boix_regime',
    values='SupDem',
    aggfunc='mean'
)

# 绘制折线图
plt.plot(pivot_df.index, pivot_df[1], label='民主政体中的民主支持度')
plt.plot(pivot_df.index, pivot_df[0], label='专制政体中的民主支持度')

# 添加图表元素
plt.xlabel('年份')
plt.ylabel('民主支持度(SupDem)')
plt.legend()
plt.show()

方案2:使用各自筛选后的年份数据(适合展示原始数据的时间分布)

直接调用筛选后数据集的year和SupDem列,确保每条折线的x轴与y轴长度一致:

import matplotlib.pyplot as plt

# 筛选对应政体的完整数据(保留year和SupDem字段)
dem_subset = dem_aut[dem_aut["e_boix_regime"] == 1]
aut_subset = dem_aut[dem_aut["e_boix_regime"] == 0]

# 分别绘制两条折线
plt.plot(dem_subset['year'], dem_subset['SupDem'], label='民主政体中的民主支持度')
plt.plot(aut_subset['year'], aut_subset['SupDem'], label='专制政体中的民主支持度')

# 添加图表元素
plt.xlabel('年份')
plt.ylabel('民主支持度(SupDem)')
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者user19562955

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:00:58