根据绘图而不是imshow映射颜色栏

时间:2017-06-02 08:02:53

标签: matplotlib colorbar colormap

我试图获取以下代码的最小示例的颜色栏。

g1 = gridspec.GridSpec(1, 1)
f, ((ax0)) = plt.subplots(1, 1)
ax0 = subplot(g1[0])

cmap = matplotlib.cm.get_cmap('viridis')

for i in linspace(0,1,11):
    x = [-1,0,1]
    y = [i,i,i]
    rgba = cmap(i)
    im = ax0.plot(x,y,color=rgba)

f.colorbar(im)

我也试过f.colorbar(cmap)

可能非常明显,但我收到了诸如

之类的错误
'ListedColormap' object has no attribute 'autoscale_None'

实际上,定义i的值更复杂,但我认为这应该可以解决问题。我的数据是用绘图绘制的,而不是用imshow绘制的(我知道如何制作色彩图。)

3 个答案:

答案 0 :(得分:3)

到目前为止,答案似乎过于复杂。 fig.colorbar()期望ScalarMappable作为其第一个参数。 ScalarMappable通常由imshowcontour图生成,并且可以随时使用。

在这种情况下,您需要定义要提供给颜色栏的自定义ScalarMappable

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

cmap = plt.cm.get_cmap('viridis')

for i in np.linspace(0,1,11):
    x = [-1,0,1]
    y = [i,i,i]
    rgba = cmap(i)
    im = ax.plot(x,y,color=rgba)

sm = plt.cm.ScalarMappable(cmap=cmap)
sm.set_array([])
fig.colorbar(sm)
plt.show()

enter image description here

答案 1 :(得分:1)

当您在Image上致电ContourSet时,您应该传递colorbarFigure。 您可以通过使用数据调用plt.imshow来生成数据点的图像。你可以从这开始:

data = []
for i in np.linspace(0,1,11):
    x = [-1,0,1]
    y = [i,i,i]
    rgba = cmap(i)
    ax0.plot(x,y,color=rgba)
    data.append([x, y])

image = plt.imshow(data)

figure.colorbar(image)

plt.show()

参考:

答案 2 :(得分:1)

Oluwafemi Sule的解决方案几乎可行,但它将矩阵绘制成与线条相同的数字。这里打开第二个图的解决方案,对第二个图进行imshow调用,使用结果在第一个图中绘制colorbar,然后在调用{{1}之前关闭第二个数字}:

plt.show()

结果如下: