pandas调用plot绘图报TypeError: no numeric data to plot如何解决
错误触发原因
- 核心问题是传入绘图的
Percent列为字符串类型,而非数值类型:从数据集预览可见,Percent列的所有值都携带%后缀,pandas读取时会将其识别为object(字符串)类型,绘图逻辑无法从字符串列中提取到可用于计算条形长度的数值,因此抛出TypeError: no numeric data to plot错误。 - 原有代码的
x、y参数映射逻辑本身符合水平条形图需求:x对应横轴(条形长度的数值维度),y对应纵轴(州名的分类维度),不存在参数传反的问题。
修复方案
- 先对
Percent列做类型转换,去除百分号后转为浮点型数值,参考代码:
# 去除百分号并转为浮点型 df_prevalence['Percent'] = df_prevalence['Percent'].str.replace('%', '').astype(float)
如果列中存在缺失值、异常非数值内容,可以先执行
df_prevalence = df_prevalence.dropna(subset=['Percent'])清理无效行,避免类型转换报错。
- 直接运行原有绘图代码即可正常生成图表。如果需要让横轴显示为百分比格式(和原数据的百分号表述一致),可以补充轴格式配置,完整示例代码如下:
import matplotlib.pyplot as plt from matplotlib.ticker import PercentFormatter # 绘图 ax = df_prevalence.plot( kind='barh', x='Percent', y='State', figsize=(15, 12), color='r', title= 'Adults with Serious Thoughts of Suicide in the Unites States by State, 2020' ) # 配置x轴为百分比显示,保留1位小数 ax.xaxis.set_major_formatter(PercentFormatter(decimals=1)) # 自动调整布局避免标签被截断 plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Liv Matthews
相关产品推荐
相关产品推荐

