Python 3使用Matplotlib添加色条

4

我已经做了大量关于如何在图中添加色标的研究,但我仍然非常困惑如何添加。我看到的示例使用不同的方法来完成,这让我感到困惑,因为我不知道哪种是“正确”的。

我看到有一种colorbar方法和colorbar()函数,那么应该用哪个来简单地添加色标呢?

有些示例是这样做的:

fig,ax = plt.subplots()
s = ax.scatter(x,y,cmap = coolwarm)
matplotlib.colorbar.ColorbarBase(ax=ax, cmap=coolwarm, values=sorted(v),
                             orientation="horizontal")

有些人只是调用该函数:

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
image = np.random.poisson(10., (100, 80))
i = ax.imshow(image, interpolation='nearest')
fig.colorbar(i)

我可能漏掉了什么,但我不知道这两个代码是如何创建色条的(我只复制了色条的代码,而不是数据的代码)。

我的问题很简单:如何在图中最简单地添加色条? 谢谢!

1个回答

4

你引用的第一个例子创建了一个ColorbarBase实例。通常这不是推荐的方式;可能有一些例外,但总体而言绝对没有理由使用这种方法。

你引用的第二个例子是创建图中色条的一种甚至是最常用的方式。使用这种方法,你是安全的。使用figure实例的colorbar方法可以清晰地表明要将色条放置在哪张图中,并提供相应的ScalarMappable(在本例中为AxesImage),确保色条使用来自该ScalarMappable的正确颜色。

fig, ax = plt.subplots()
im = ax.imshow(image)
fig.colorbar(im)

或者
fig, ax = plt.subplots()
sc = ax.scatter(x,y, c=something)
fig.colorbar(sc)

有一种更简单的方法,就是直接调用。
plt.colorbar()

请注意,这可能会导致混淆,因为它试图自动确定应创建颜色条的情节。因此,可能会有一些失败的机会,我不建议使用它。


非常感谢您的回复!它确实帮助我澄清了一些事情 :) 我有几个问题: 什么是ScalarMappable?我一直在收到关于这个的错误,但我找不到清晰的解释。 如果我想让色条从红色到绿色,或者如果我想要所有颜色,我该如何使c等于那个颜色渐变,以便Python知道我想要那种颜色渐变? - ATP
ScalarMappable是一个对象,它结合了一个颜色映射和一个归一化,以便能够确定它所托管的值应该具有哪种颜色。通常情况下,您不需要自己创建这个对象,而是像imshow或scatter这样的绘图命令会返回它。颜色渐变将通过使用颜色映射来产生。从这里选择任何一种颜色映射,并像cmap="RdYlGn"这样在绘图函数中提供它。c可以是与xy大小相同的任何数组列表,每个点一个值。 - ImportanceOfBeingErnest
输入到“c”中的数据是RGB值吗?或者我应该在列表中写入什么? - ATP
我不知道,你需要决定。通常你有一个想要映射到颜色的数量,对吧?这个数量作为参数传递给 cplt.scatter([1,2,3],[3,2,1],c=[6,7,8], cmap="RdYlGn") - ImportanceOfBeingErnest
好的,我现在明白了。谢谢!最后一个问题,当使用这段代码时: fig, ax = plt.subplots() sc = ax.scatter(theta_polar_rad,r_polar) 在哪里可以指定我想要的图形是极坐标图?我之前使用的是: plt.axes(polar=True) 但似乎与这个新代码不兼容。其他人使用: ax = plt.subplot(111, projection='polar') c = plt.scatter(theta, r, cmap=plt.cm.hsv) 但我不能将projection = 'polar'添加到我的代码中,因为我正在使用不同的函数。 - ATP
就像在这个例子中一样:f,axarr = plt.subplots(2, 2, subplot_kw=dict(projection='polar'))。请注意,原则上这是一个新问题,因此最好不要使用不同问题的评论功能来提出不同的问题。 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接