Matplotlib imshow为1-7离散值分别映射单一颜色的问题求助
问题1:色条刻度未对齐色块中心
当前配置存在两处参数偏差:
- 色条
ticks设置为range(7)生成的是[0,1,2,3,4,5,6],和你数据1-7的实际取值范围不匹配 vmin=1、vmax=7的配置下,7个离散颜色的分界点为1/2/3/4/5/6/7,每个颜色对应左闭右开区间,整数值落在区间左边界,自然无法对齐色块中心
调整方案:将vmin设为0.5、vmax设为7.5,让1-7的整数值刚好落在每个颜色区间的中心位置,同时把色条ticks改为1到7的整数序列即可。
问题2:出现多余的过渡杂色线条
这是interpolation=None的配置导致的:Matplotlib中interpolation=None会默认读取全局配置的插值规则,大部分默认配置会启用抗锯齿插值,相邻不同值的像素之间会生成过渡色,才会出现不属于你数据取值的杂色线条。
调整方案:把插值参数改为interpolation='nearest',完全关闭过渡插值,每个像素只显示自身取值对应的纯色。
修改后完整代码
import matplotlib as mpl import matplotlib.pyplot as plt # data为你的2×660、取值范围1-7的整数数组 fig, ax = plt.subplots() # 新版Matplotlib推荐用mpl.colormaps.get_cmap替代已废弃的mpl.cm.get_cmap,旧版本可兼容原写法 cmap = mpl.colormaps.get_cmap('Set2', 7) im = plt.imshow(data, cmap=cmap, vmin=0.5, vmax=7.5, aspect=25, interpolation='nearest') fig.colorbar(im, ticks=range(1,8), orientation="horizontal") plt.show()
内容的提问来源于stack exchange,提问作者Tianxun Zhou
相关产品推荐
相关产品推荐

