如何在同一图表绘制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
相关产品推荐
相关产品推荐

