Python matplotlib从轴获取可映射的颜色栏

Python matplotlib从轴获取可映射的颜色栏,python,matplotlib,Python,Matplotlib,我想添加一个颜色条,而不包含轴在绘图时返回的内容。 有时我把东西画到函数中的一个轴上,它什么也不返回。 有没有一种方法可以从一个轴上获取颜色条的可映射性,在这个轴上预先进行了打印? 我相信有足够的关于轴本身绑定的颜色贴图和颜色范围的信息 我想做一些类似的事情: def plot_something(ax): ax.plot( np.random.random(10), np.random.random(10), c= np.random.random(10)) fig, axs = p

我想添加一个颜色条,而不包含轴在绘图时返回的内容。 有时我把东西画到函数中的一个轴上,它什么也不返回。 有没有一种方法可以从一个轴上获取颜色条的可映射性,在这个轴上预先进行了打印? 我相信有足够的关于轴本身绑定的颜色贴图和颜色范围的信息

我想做一些类似的事情:

def plot_something(ax):
    ax.plot( np.random.random(10), np.random.random(10), c= np.random.random(10))

fig, axs = plt.subplots(2)
plot_something(axs[0])
plot_something(axs[1])

mappable = axs[0].get_mappable() # a hypothetical method I want to have.

fig.colorbar(mappable)
plt.show()
编辑


正如代码片段中给出的那样,对可能重复的问题的答案可以部分解决我的问题。然而,这个问题更多的是关于从轴检索一般可映射对象,根据Diziet Asahi的说法,这似乎是不可能的。

获取可映射对象的方式将取决于在
plot_something()
函数中使用的绘图函数

例如:

  • plot()
    返回
    Line2D
    对象。对该对象的引用是 存储在轴对象的轴线列表中。话虽如此,我认为
    Line2D
    不能用作
    colorbar()的可映射对象
  • scatter()
    返回一个
    PathCollection
    集合对象。此对象存储在Axes对象的
    ax.collections
    列表中
  • 另一方面,
    imshow()
    返回一个
    AxesImage
    对象,该对象存储在
    ax.images
您可能必须尝试查看这些不同的列表,直到找到合适的对象来使用

def plot_something(ax):
    x = np.random.random(size=(10,))
    y = np.random.random(size=(10,))
    c = np.random.random(size=(10,))
    ax.scatter(x,y,c=c)

fig, ax = plt.subplots()
plot_something(ax)
mappable = ax.collections[0]
fig.colorbar(mappable=mappable)

可能重复的嗯。。。毕竟,没有统一的方法来引用可映射对象。那么我认为这不是一个好的方向。我应该尽量避免这样搞阴谋。