我试图获取以下代码的最小示例的颜色栏。
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绘制的(我知道如何制作色彩图。)
答案 0 :(得分:3)
到目前为止,答案似乎过于复杂。 fig.colorbar()
期望ScalarMappable
作为其第一个参数。 ScalarMappable
通常由imshow
或contour
图生成,并且可以随时使用。
在这种情况下,您需要定义要提供给颜色栏的自定义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()
答案 1 :(得分:1)
当您在Image
上致电ContourSet
时,您应该传递colorbar
或Figure
。
您可以通过使用数据调用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()
结果如下: