Matplotlib 基于plot而不是imshow映射颜色栏

Matplotlib 基于plot而不是imshow映射颜色栏,matplotlib,colorbar,colormap,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

我试图为下面的代码示例获取一个颜色条

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.colorbarcmap

可能很明显,但我会遇到如下错误

'ListedColormap' object has no attribute 'autoscale_None'
事实上,定义i的值更复杂,但我认为这应该起作用。我的数据是用plot而不是imshow绘制的,我知道如何制作彩色地图。

在图形上调用colorbar时,应该传递图像或轮廓集。 您可以使用数据调用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()
参考:

当您调用图形上的颜色栏时,应该传递图像或轮廓集。 您可以使用数据调用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()
参考:

的解决方案几乎可行,但它将矩阵绘制成与直线相同的图形。在这里,一个解决方案打开第二个图形,对该第二个图形执行imshow调用,使用结果在第一个图形中绘制颜色条,然后在调用plt.show之前关闭第二个图形:

结果如下所示:

的解决方案几乎可行,但它将矩阵绘制成与直线相同的图形。在这里,一个解决方案打开第二个图形,对该第二个图形执行imshow调用,使用结果在第一个图形中绘制颜色条,然后在调用plt.show之前关闭第二个图形:

结果如下所示:


到目前为止,答案似乎过于复杂。fig.colorbar期望ScalarMapable作为其第一个参数。通常,ScalarMappings由imshow或contourplots生成,并且随时可用

在这种情况下,您需要定义自定义ScalarMapable以提供给colorbar

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()

到目前为止,答案似乎过于复杂。fig.colorbar期望ScalarMapable作为其第一个参数。通常,ScalarMappings由imshow或contourplots生成,并且随时可用

在这种情况下,您需要定义自定义ScalarMapable以提供给colorbar

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()

我找到了一条路。我会很快更新的。有点延迟,这是我在周五发布最初的问题后发现的。Z=[[0,0],[0,0]]levels=linspace-1.5,5.5,11 range-1.4433333,5.513333+s,step CS3=plt.tourofz,levels,cmap=mymap plt.clf是我用来定义我的scalarmappable的,基于我在上面找到的另一篇帖子。但这里提供的解决方案似乎更合适,更直接地解决了问题。谢谢我找到了一条路。我会很快更新的。有点延迟,这是我在周五发布最初的问题后发现的。Z=[[0,0],[0,0]]levels=linspace-1.5,5.5,11 range-1.4433333,5.513333+s,step CS3=plt.tourofz,levels,cmap=mymap plt.clf是我用来定义我的scalarmappable的,基于我在上面找到的另一篇帖子。但这里提供的解决方案似乎更合适,更直接地解决了问题。谢谢如何以页面宽度的一半显示图形?我的屏幕显示得太大了……在so帖子里面。在这里,我运行matplotlib代码,缩小出现的窗口,制作一个屏幕截图,将屏幕截图复制到IrfanView中,选择感兴趣的区域,点击Strg+C,然后将其粘贴到so帖子中。另一个选项是已经从代码plt.rcParams[figure.figsize]=3,3创建了一个较小的图形,并使用该图形。最后一个选项:而不是用![][1]语法,在SO帖子中使用html。谢谢,最后一个是我要找的。如何以页面宽度的一半显示图形?我的屏幕显示得太大了……在so帖子里面。在这里,我运行matplotlib代码,缩小出现的窗口,制作一个屏幕截图,将屏幕截图复制到IrfanView中,选择感兴趣的区域,点击Strg+C,然后将其粘贴到so帖子中。另一个选项是已经从代码plt.rcParams[figure.figsize]=3,3创建了一个较小的图形,并使用该图形。最后一个选项:而不是用![[1]语法,在SO帖子中使用html。谢谢,最后一个就是我要找的。