Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 具有单个颜色条的少数行的线条集合_Numpy_Matplotlib_Matplotlib Basemap - Fatal编程技术网

Numpy 具有单个颜色条的少数行的线条集合

Numpy 具有单个颜色条的少数行的线条集合,numpy,matplotlib,matplotlib-basemap,Numpy,Matplotlib,Matplotlib Basemap,我正在尝试在绘图中使用LineCollection绘制一些线。这些线条中的每一条都需要映射到colorbar,每一条线条的范围各不相同。我试过这里解释的 最后,我想要一个颜色条,比如说三行,覆盖所有范围。但是,颜色栏是为最后一行值设置的。所以我看了这里 但我并不成功,因为我对Matplotlib还很陌生。我把代码贴在下面。我只是想把所有三条线的线(也显示在y轴上)的值映射到一个颜色栏中。感谢您的帮助 将numpy导入为np 将matplotlib.pyplot作为plt导入 从matplot

我正在尝试在绘图中使用LineCollection绘制一些线。这些线条中的每一条都需要映射到colorbar,每一条线条的范围各不相同。我试过这里解释的

最后,我想要一个颜色条,比如说三行,覆盖所有范围。但是,颜色栏是为最后一行值设置的。所以我看了这里

但我并不成功,因为我对Matplotlib还很陌生。我把代码贴在下面。我只是想把所有三条线的线(也显示在y轴上)的值映射到一个颜色栏中。感谢您的帮助

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.collections导入LineCollection
从matplotlib导入颜色
线段=[np.linspace(0,1,10),
np.linspace(0,5,10),
np.linspace(0,2,10)]
xVec=np.linspace(0,1,10)
图,ax=plt.子批次()
对于范围(0,len(线段))中的i:
cValue=np.linspace(最小(线段[i]),最大(线段[i]))
norm=colors.Normalize(vmin=cValue.min(),vmax=cValue.max())
点=np.数组([xVec,线段[i]])T.重塑(-1,1,2)
PointSegments=np。连接([点[:-1],点[1:],轴=1)
lc=线集合(点段,cmap=plt.get_cmap('jet'),
标准=标准)
#plt.gca().add_集合(lc)
ax.添加_集合(lc)
最大设定值(最小值(xVec),最大值(xVec))
ax.set_ylim(np.amin(线段),np.amax(线段))
lc.set_数组(cValue)
图颜色条(lc)
def更新(更改的_行):
对于范围(0,len(线段))中的i:
if(已更改的行数。get\u cmap()!=lc.get\u cmap())
或更改了行。get\u clim()!=lc.get\u clim()):
lc.set\u cmap(更改了\u行。获取\u cmap())
lc.set\u clim(更改了\u行。get\u clim())
对于范围(0,len(线段))中的i:
lc.callbacksSM.connect('changed',update)
plt.show()

我已经修改了你的代码。基本上,您需要做的是为整个数据集创建一个norm实例,然后根据给定norm的colormap将颜色值分配给片段。然后可以将其相应地传递到颜色栏

因此

将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.collections导入LineCollection
从matplotlib导入颜色
线段=[np.linspace(0,1,10),
np.linspace(0,5,10),
np.linspace(0,2,10)]
xVec=np.linspace(0,1,10)
图,ax=plt.子批次()
norm=colors.Normalize(vmin=min([i.min()表示线段中的i]),
vmax=max([i.max()表示线段中的i]))
cmap=plt.get_cmap('jet'))
对于范围(0,len(线段))中的i:
C值=范数(线段[i])
c=cmap(cValue)
点=np.数组([xVec,线段[i]])T.重塑(-1,1,2)
PointSegments=np。连接([点[:-1],点[1:],轴=1)
lc=线集合(点线段,cmap=cmap,
标准=标准,颜色=c)
#plt.gca().add_集合(lc)
ax.添加_集合(lc)
最大设定值(最小值(xVec),最大值(xVec))
ax.set_ylim(np.amin(线段),np.amax(线段))
#lc.set_数组(cValue)
sc=plt.cm.ScalarMappable(norm=norm,cmap=cmap)
图颜色条(sc)
def更新(更改的_行):
对于范围(0,len(线段))中的i:
if(已更改的行数。get\u cmap()!=lc.get\u cmap())
或更改了行。get\u clim()!=lc.get\u clim()):
lc.set\u cmap(更改了\u行。获取\u cmap())
lc.set\u clim(更改了\u行。get\u clim())
对于范围(0,len(线段))中的i:
lc.callbacksSM.connect('changed',update)
plt.show()

我相信,仅仅是一些小评论,直接设置颜色值会使linecollection中的norm和cmap变得多余。