使用plotnine保存图像失败,报TypeError错误求助
解决plotnine热力图保存时出现
TypeError: '<' not supported between str and float的问题 核心原因
错误提示明确显示字符串与浮点数无法比较,这说明绘制热力图的数据源中,负责映射颜色的数值列混入了非数值类型(字符串)数据。之前代码能运行,大概率是数据发生了变化(比如新增了带文本的脏数据、空值标记从NaN变成了字符串"NA"等)。
解决方案
1. 检查并修复数据类型
先定位问题列,将其转换为数值类型:
import pandas as pd # 假设你的热力图数据存储在df中,填充颜色的列名为'value' # 查看列内所有数据类型,确认是否存在字符串 print(df['value'].apply(type).unique()) # 将列转换为数值类型,无法转换的内容设为NaN df['value'] = pd.to_numeric(df['value'], errors='coerce') # 处理NaN值:可以选择删除含NaN的行,或者用均值/中位数填充 df = df.dropna(subset=['value']) # 或者填充:df['value'] = df['value'].fillna(df['value'].mean())
2. 修正ggsave的参数调用
确保参数传递正确,优先使用关键字参数避免顺序错误:
w = 10 h = 5 # 明确指定filename和plot参数 p9.ggsave(filename=plotName, plot=heatmap, width=w, height=h, dpi=300, limitsize=False)
同时确认plotName是合法的文件名(比如"my_heatmap.png"),如果包含路径,要确保路径已存在。
3. 用测试数据验证
用干净的测试数据绘制并保存热力图,排除代码或环境问题:
import plotnine as p9 import pandas as pd test_df = pd.DataFrame({ 'x': ['Group1', 'Group1', 'Group2', 'Group2'], 'y': ['ItemA', 'ItemB', 'ItemA', 'ItemB'], 'value': [2.5, 4.2, 3.7, 1.8] }) test_heatmap = (p9.ggplot(test_df, p9.aes('x', 'y', fill='value')) + p9.geom_tile() + p9.scale_fill_gradient(low='white', high='blue')) p9.ggsave(filename='test_heatmap.png', plot=test_heatmap, width=10, height=5, dpi=300, limitsize=False)
如果测试代码能成功保存,说明问题完全出在原始数据上,回到第一步彻底清理数据即可。
内容的提问来源于stack exchange,提问作者Paulina Stehlik
相关产品推荐
相关产品推荐

