如何移除matshow二维图的NaN值并将标签格式化为百分比
解决方案
你需要对现有代码做两处核心修改,分别处理NaN值渲染和百分比格式化需求:
- 针对NaN值显示纯白:复制目标色阶后调用
set_bad()方法,将缺失值的渲染色指定为纯白色 - 针对百分比格式化:先判断值是否为NaN,非空值按百分比格式输出,NaN值跳过文本渲染
修改后完整代码
import matplotlib.pyplot as plt import pandas as pd import numpy as np filename = "data.csv" df = pd.read_csv(filename, header=None) fig, ax = plt.subplots() # 复制色卡并设置NaN值渲染为白色 cmap = plt.cm.get_cmap('bwr').copy() cmap.set_bad(color='white') ax.matshow(df, cmap=cmap) for (i, j), z in np.ndenumerate(df): # 跳过NaN值的文本渲染 if pd.isna(z): continue # 格式化为百分比,若原始数据已为百分比数值可去掉*100 ax.text(j, i, '{:0.1f}%'.format(z * 100), ha='center', va='center', bbox=dict(boxstyle='round', facecolor='white', edgecolor='0.3')) plt.show()
补充说明
如果你的原始数据本身已经是百分比格式(比如数值10对应10%),只需要把格式化代码中的*100删除即可正常显示。
内容的提问来源于stack exchange,提问作者MUD
相关产品推荐
相关产品推荐

