能否人为扩展pcolor色图坐标轴,使x轴固定1-40、y轴固定1-60?
解决方案
可以通过补全透视表的行和列范围实现需求,无需修改核心绘图参数,缺失数据位置会自动留空,修改后的代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt rng = np.random.default_rng() df = pd.DataFrame(rng.integers(1, 32, size=(100, 3)), columns=list('xyw')) sample_pvt = df.pivot_table(index='x',columns='y') sample_pvt.columns = sample_pvt.columns.droplevel(0) # 新增:补全行索引(对应y轴)为1~60,列索引(对应x轴)为1~40,缺失值设为NaN sample_pvt = sample_pvt.reindex(index=range(1, 61), columns=range(1, 41)) fig, axs = plt.subplots(figsize=(10,10)) orig_map=plt.cm.get_cmap('viridis') reversed_map = orig_map.reversed() # 可选:设置无数据区域的填充颜色,默认透明,这里可以指定为白色 # reversed_map.set_bad(color='white') plt.pcolor(sample_pvt, cmap = reversed_map) plt.xticks(np.arange(len(sample_pvt.columns))+0.5, sample_pvt.columns) plt.yticks(np.arange(len(sample_pvt.index))+0.5, sample_pvt.index) cbar = plt.colorbar() plt.show()
原理解释
reindex方法会按照你指定的全量范围重新对齐数据表的行和列,原本没有数据的位置会自动填充为NaN- matplotlib的
pcolor函数绘制NaN值时默认不填充颜色,呈现透明效果,和你要求的「无数据字段留空」完全匹配 - 如果需要自定义无数据区域的颜色,取消代码中
set_bad行的注释即可,修改color参数值可以换其他填充色
内容的提问来源于stack exchange,提问作者sdom
相关产品推荐
相关产品推荐

