如何修改 matplotlib 定性颜色图中的间隔?

How to modify intervals on matplotlib's qualitative color maps?

import matplotlib.pyplot as plt
import numpy as np

我有一个 2D numpy 数组:

mock=\
np.array([[0.1,0.2,0.3],
          [0.2,0.3,0.4],
          [0.3,0.4,0.5],
          [0.4,0.5,0.6],
          [0.5,0.6,0.7],
          [0.6,0.7,0.8],
          [0.7,0.8,0.9]])

我使用 tab20c 颜色图绘制这些值,来自所谓的“定性”颜色图:

plt.figure(figsize=(6,6))
im = plt.imshow(mock,cmap = "tab20c", vmin=0, vmax=1)
plt.colorbar(im)

如果我希望所有值都低于某个特定值,假设 0.25 具有与 0.25 相同的颜色,不仅替换绘图本身的颜色,而且替换颜色条中的颜色,我将如何处理?预期的输出将是:左上角的所有 3 个方块都是红色的,颜色图中底部的 5 个矩形也都是红色的。

通过这样做,我实质上是在修改条形图中红色的区间:新版本将 0 到 0.25 区间内的所有值显示为红色,而不是将 0.2 到 0.25 区间内的值显示为红色红色.

使用numpy.clip将0.25以下的数据设置为0.25怎么样?

im = plt.imshow(np.clip(mock, 0.25, np.inf), cmap = "tab20c", vmin=0, vmax=1)

这对我来说似乎是最直接的解决方案,因为它不需要弄乱绘图参数。

输出:

您可以调整现有的颜色图:

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

tab20c = cm.get_cmap('tab20c', 256)
newcolors = tab20c(np.linspace(0, 1, 256))
red = np.array([1, 0, 0, 1])
newcolors[:int(256/4), :] = red
newcmp = ListedColormap(newcolors)


mock=\
np.array([[0.1,0.2,0.3],
          [0.2,0.3,0.4],
          [0.3,0.4,0.5],
          [0.4,0.5,0.6],
          [0.5,0.6,0.7],
          [0.6,0.7,0.8],
          [0.7,0.8,0.9]])


plt.figure(figsize=(6,6))
im = plt.imshow(mock,cmap = newcmp, vmin=0.0, vmax=1)
plt.colorbar(im)