在 Python 3 中绘制颜色条

Plotting colorbar in Python 3

我正在尝试根据数组中的颜色为误差线点着色。但是得到一个错误。我的代码如下所示:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable, coolwarm as cmap
from matplotlib.colors import Normalize

fig = plt.figure(1)
sp = fig.add_subplot(1, 1, 1)
sp.set_xlabel(r'$x$')
sp.set_ylabel(r'$y$')

x = np.random.rand(10)
y = np.random.rand(10)
M = np.logspace(9, 10, 10)
norm = Normalize(vmin=8, vmax=11,clip=False)  # controls the min and max of the colorbar
smap = ScalarMappable(cmap=cmap, norm=norm)
for xi, yi, Mi in zip(x, y, M):
    c = cmap(norm(np.log10(Mi)))  # make sure to color by log of mass, not mass
    sp.errorbar(
        xi,
        yi,
        yerr=[[.1], [.1]],
        xerr=[[.1], [.1]],
        ecolor=c,
        marker='o',
        mec=c,
        mfc=c
    )

cb = plt.colorbar(smap)
cb.set_label(r'$\log_{10}M$')

我收到以下错误: TypeError:您必须先 set_array 才能映射

对于 matplotlib < 3.1,您需要设置一个数组 - 可以为空

sm = ScalarMappable(cmap=cmap, norm=norm)
sm.set_array([])
fig.colorbar(sm)

对于 matplotlib >= 3.1,这不再是必需的。

sm = ScalarMappable(cmap=cmap, norm=norm)
fig.colorbar(sm)