繁体   English   中英

在 Matplotlib Imshow 中设置离散 Colors

[英]Setting Discrete Colors in Matplotlib Imshow

我已经看到了许多用于建立独特 cmap 颜色代码的资源,例如:

i) 在 matplotlib 中合并颜色图

ii) Python:根据 class,RGBA 参数 0.0 色点无效

iii) 在 matplotlib 中为 imshow 定义离散颜色图

这些都不能完全回答我的问题。 我有 900 行,每行有 1 或 0 的 200 个数据点。在成品中,图表的前 20% 应该有蓝色尖峰代表 1,底部 80% 应该有红色尖峰代表 1。 所以 y 轴 >=720== 蓝色和 y 轴 <720 = 红色。

这些 colors 的 imshow cmap 代码是 plt.cm.Blues 和 plt.cm.Red

将所有尖峰标记为蓝色相对容易:

img0 = raster[0].imshow(spikes, cmap=plt.cm.Blues, origin='lower', aspect="auto")

超过 200 个时间步长的 900 个神经元的尖峰光栅

但是,当我尝试拆分 cmap 的编码时,我遇到了与输入数据格式相关的 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)

根据您的评论,您想要的只是在同一轴上具有不同颜色图的两张图像:


import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(900, 30)

fig, ax = plt.subplots()
img0 = ax.imshow(data[:720,:], cmap='Blues', vmin=0, vmax=1,
                  extent=[0, 30, 0, 719],
                  origin='lower', aspect="auto")
img1 = ax.imshow(data[720:,:], cmap='Reds', vmin=0, vmax=1,
                  extent=[0, 30, 720, 899],
                  origin='lower', aspect="auto")
ax.set_ylim(0, 900)
plt.show()

在此处输入图像描述

就像是

import matplotlib.cm as cm
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap

data = np.random.rand(50, 30) * 900

bottom = cm.get_cmap('Blues', 204)
top = cm.get_cmap('Reds', 52)

newcolors = np.vstack((bottom(np.linspace(0, 1, 204)),
                       top(np.linspace(0, 1, 52))))
newcmp = ListedColormap(newcolors, name='RedBlue')
img0 = plt.imshow(data, cmap=newcmp, vmin=0, vmax= 900,
                        origin='lower', aspect="auto")
plt.colorbar()
plt.show()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM