我想从 Colormap
对象而不是使用可映射对象(例如从 imshow
返回。
从 docs 我认为这应该可以使用选项 4。
我正在使用以下代码:
import numpy as np
import proplot as pplt
import matplotlib as mpl
x = np.linspace(0, 2*np.pi, endpoint=True, num=20)
y = 100*np.sin(x)
cmap = mpl.cm.get_cmap('jet')
norm = mpl.colors.Normalize(vmin=-100, vmax=100)
colors = cmap(norm(y))
fig, ax = pplt.subplots()
ax.scatter(x, y, c=colors)
fig.colorbar(cmap, values=np.linspace(-100, 100, endpoint=True, num=100))
结果如下:
这几乎是我想要的,但我想将条形值的范围设置为 -100 到 100,我认为 values
参数可以做到这一点。如果我查看代码,似乎 values
被忽略,而支持 np.linspace(0, 1)
我已经试过了:
num = 1000
values = np.linspace(-100, 100, num=num, endpoint=True)
colors_cont = cmap(norm(values))
cbar = fig.colorbar(colors_cont, values=values, ticks=[-100, 0, 100],
boundaries=np.linspace(-100, 100, num=num, endpoint=True))
这或多或少有效,但我更愿意将 cmap 交给 proplot 并让它发挥其魔力。
根据 this 帖子使用 ScalarMappable
不适用于 proplot:
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
cbar = fig.colorbar(sm)