Python绘制帕累托图时出现Invalid syntax语法错误的解决求助
帕累托图绘制语法错误修复方案
错误根源
语法报错指向第8行,但实际问题出在第7行及后续代码的多处语法、逻辑错误:
- 括号不匹配:第7行
ax1.bar(...)的左括号没有对应闭合右括号,Python解析器会将后续行识别为bar()方法的入参,因此报错位置滞后到第8行;后续ax2.plot(...)同样存在括号缺失问题 - 语法错误:
df.filter(items=['date_vacination'', ...])里date_vacination多写了一个单引号,且列名拼写前后不一致(混用data_vacinacao、date_vacination) - 缩进错误:
ax2 = ax1.twinx()之后的所有代码都多了前置缩进,违反Python缩进规则 - 逻辑错误:初始创建了2行1列的双张子图,后续又用
ax1.twinx()覆盖了原ax2对象,不符合帕累托图单x轴、左右双y轴的结构要求;同时将plot()方法的返回值作为bar()的入参属于逻辑冗余,没有实际意义
修正后参考代码
import pandas as pd import matplotlib.pyplot as plt # 请先确认你的df列名和以下代码中的列名匹配,这里假设df已提前按接种日期排序 # 帕累托图只需要1个基础子图,再生成右侧twin轴即可 fig, ax1 = plt.subplots(figsize=(15,15)) color1 = 'tab:blue' ax1.set_title('各年龄段接种者相对频率随接种日期分布帕累托图', fontsize=20) ax1.set_ylabel('接种者绝对累计频率', fontsize=15) ax1.set_xlabel('接种日期', fontsize=15) # 绘制柱状图(左侧y轴) df_sorted = df.sort_values('date_vacination', ascending=False) ax1.bar(df_sorted['date_vacination'], df_sorted['individuos'], color=color1) ax1.tick_params(axis='y', labelcolor=color1, labelsize=20) ax1.tick_params(axis='x', labelrotation=45, labelsize=20) # 生成右侧y轴绘制相对频率折线 ax2 = ax1.twinx() color2 = 'tab:red' ax2.set_ylabel('相对频率(%)', fontsize=15) ax2.plot(df_sorted['date_vacination'], df_sorted['ageGroup freq(%)'], color=color2, linewidth=3) ax2.tick_params(axis='y', labelcolor=color2, labelsize=20) ax2.set_ylim([0, 120]) plt.tight_layout() plt.show()
额外注意事项
- 请确保提前核对你的DataFrame列名,和代码中引用的列名完全一致,避免拼写错误
- 如果需要按年龄段分组展示,可提前对df做
groupby(['date_vacination','ageGroup'])聚合后再绘图
内容的提问来源于stack exchange,提问作者xauelias
相关产品推荐
相关产品推荐

