我的颜色栏没有显示正确的颜色(Python,matplotlib)

My colorbar doesn't show the right colors (Python, matplotlib)

我无法让我的颜色条显示与我的散点图相同的颜色光谱。它显示了颜色条的默认颜色,而不是我的颜色分级数据点的 pink/purple 到黑色光谱。我已阅读此处的多个其他主题,但无济于事,但如果我遗漏了可以解决我的问题的内容,请提醒我注意类似的主题。

我做了一个简短的代码来说明我的问题:

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng()
arr = np.arange(7000)
rng.shuffle(arr)
r = np.sqrt(np.random.random(7000))
theta = np.random.uniform(high = 2*np.pi, size = 7000)
X = np.array(r*np.cos(theta))
Y = np.array(r*np.sin(theta))

def values_to_colormap(values):
    values_scale = values/np.max(values)
    (a,) = np.shape(values)
    cmap = values_scale.reshape(a,1)*np.array([[0.6, 0.4, 0.6]])
    return cmap

points_colors = values_to_colormap(arr)

ps = plt.scatter(X,Y, marker = '.', color = points_colors)
plt.colorbar(ps, orientation='horizontal')
plt.axis('equal')
plt.show();

颜色条使用散点图的cmapnorm。在这种情况下,给出了单独的颜色,并且颜色条回落到默认颜色图('viridis')和默认标准(因为没有给出 vmin 也没有 vmax 也没有明确的颜色值,使用 0 和 1)。

您的 values_to_colormap 函数将 0 映射到颜色 (0, 0, 0),将最大值映射到 (0.6, 0.4, 0.6)。这相当于在给定颜色之间使用 vmin=0vmax=arr.max()LinearSegmentedColormap 的范数:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

rng = np.random.default_rng()
arr = np.arange(7000)
rng.shuffle(arr)
r = np.sqrt(np.random.random(7000))
theta = np.random.uniform(high=2 * np.pi, size=7000)
X = np.array(r * np.cos(theta))
Y = np.array(r * np.sin(theta))

ps = plt.scatter(X, Y, marker='.', c=arr, vmin=0, vmax=arr.max(),
                 cmap=LinearSegmentedColormap.from_list('', [(0, 0, 0), (0.6, 0.4, 0.6)]))
plt.colorbar(ps, orientation='horizontal')
plt.axis('equal')
plt.show()