如何在Matplotlib Imshow中按Y轴区域设置离散颜色
分区域设置Matplotlib二值数据颜色映射
我查阅了多个关于自定义Matplotlib颜色映射(cmap)的资料,但均无法解决我的需求:我有一个900行、200列的二值数据集(元素值为0或1),需要实现Y轴≥720的区域(顶部20%)中值为1的点显示为蓝色,Y轴<720的区域(底部80%)中值为1的点显示为红色,对应颜色映射分别为plt.cm.Blues和plt.cm.Reds。
简单全图颜色设置
单独设置全图为蓝色较为简单:
img0 = raster[0].imshow(spikes, cmap=plt.cm.Blues, origin='lower', aspect="auto")
错误的自定义映射尝试
尝试自定义分区域颜色映射时,遇到了与输入数据格式相关的RGB错误,代码如下:
colors1 = plt.cm.Reds(np.linspace(0,1,int(200*900*.8)).reshape(int(900*.8),200)) colors2 = plt.cm.Blues(np.linspace(0,1,int(200*900*.2)).reshape(int(900*.2),200)) cmap = matplotlib.colors.LinearSegmentedColormap.from_list('mycmap', np.append(colors1,colors2)) img0 = raster[0].imshow(spikes, cmap=cmap, origin='lower', aspect="auto")
可行解决方案
最终可行的解决方案代码如下:
img0 = raster[0].imshow(spikes[720:,:], cmap='Blues', extent=[0, 30, 720, 899], origin='lower', aspect="auto") img0 = raster[0].imshow(spikes[:720,:], cmap='Reds', extent=[0, 30, 0, 719], origin='lower', aspect="auto") raster[0].set_ylim(0, 900)
内容的提问来源于stack exchange,提问作者da Bears
相关产品推荐
相关产品推荐

