如何修改 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)
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)