matplotlib 无归一化的等高线图色图

wixjitnu  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(162)

我使用等高线图作为电极阵列的2d表示。当电极有效时,等值线图上对应于它们的像素具有值1。当电极不活动时,等值线图上对应于它们的像素具有值0。阵列上的其他所有内容(保持电极的材料)的值为-1。
对于可视化,我想制作一个自定义的色彩Map表,它将值为1的任何内容设置为白色,将值为0的任何内容设置为黑色,将其他任何内容设置为灰色。
我去了这个栈交换岗位:matplotlib colormap without normalization
基于此,我想也许可以做以下几点

def cmap(val):
            if val == 0:
                return "black"
            elif val == 1:
                return "white"
            else:
                return "grey"

plt.contourf(self.x, self.y, self.activity_meshgrid, cmap = cmap(self.activity_meshgrid))

但是,这会引发一个错误,即这是不明确的,我应该使用。any()或.all()当我使用。any()或.all(),我意识到它不会接受以这种方式传递给它的颜色,因为只有颜色Map是允许的值。这使我认为不可能以这种方式将色彩Map表定义为函数。

uxh89sit

uxh89sit1#

也许是这个

import matplotlib.pyplot as plt
import numpy as np
from random import choices

values = np.array([-1, 0, 1])
rgb = np.array([(0.5, 0.5, 0.5), (0, 0, 0), (1, 1, 1)])
names = np.array(['gray', 'black', 'white'])

nx = 50
ny = 50

n = nx*ny
index = np.array(choices([0, 1, 2], k=n)).reshape((ny, nx))

f = values[index]
colors = rgb[index]
colors_flat = names[index].flatten()

fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
ax1.contourf(f, colors=colors_flat)
ax1.set_aspect('equal')
ax2.imshow(colors, interpolation='none')
ax3.matshow(colors)

该图将是这样的(类似):

64jmpszr

64jmpszr2#

其他选项:

import matplotlib.pyplot as plt
import numpy as np
from random import choices

nx = 50
ny = 50

# Just a dummy data array with -1; 0 and 1.
f = np.array(choices([-1, 0, 1], k=nx*ny)).reshape((ny, nx))

i_zero = np.where(f==0)
i_one = np.where(f==1)
i_neg_one = np.where(f==-1)

colors_name = np.empty((ny, nx), dtype='<U20')
colors_name[i_zero] = 'black'
colors_name[i_one] = 'white'
colors_name[i_neg_one] = 'gray'
colors_flat = colors_name.flatten()

colors_rgb = np.zeros((ny, nx, 3))
colors_rgb[i_zero] = (0, 0, 0)
colors_rgb[i_one] = (1, 1, 1)
colors_rgb[i_neg_one] = (0.5, 0.5, 0.5)

fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
ax1.contourf(f, colors=colors_flat)
ax1.set_aspect('equal')
ax2.imshow(colors_rgb, interpolation='none')
ax3.matshow(colors_rgb)

相关问题