我的颜色栏没有显示正确的颜色(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();
颜色条使用散点图的cmap
和norm
。在这种情况下,给出了单独的颜色,并且颜色条回落到默认颜色图('viridis')和默认标准(因为没有给出 vmin
也没有 vmax
也没有明确的颜色值,使用 0 和 1)。
您的 values_to_colormap
函数将 0 映射到颜色 (0, 0, 0)
,将最大值映射到 (0.6, 0.4, 0.6)
。这相当于在给定颜色之间使用 vmin=0
、vmax=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()
我无法让我的颜色条显示与我的散点图相同的颜色光谱。它显示了颜色条的默认颜色,而不是我的颜色分级数据点的 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();
颜色条使用散点图的cmap
和norm
。在这种情况下,给出了单独的颜色,并且颜色条回落到默认颜色图('viridis')和默认标准(因为没有给出 vmin
也没有 vmax
也没有明确的颜色值,使用 0 和 1)。
您的 values_to_colormap
函数将 0 映射到颜色 (0, 0, 0)
,将最大值映射到 (0.6, 0.4, 0.6)
。这相当于在给定颜色之间使用 vmin=0
、vmax=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()