具有相同颜色的散点图和等高线图

时间:2017-02-08 00:09:13

标签: python matplotlib colormap

是否可以强制plt.scatterplt.contourfplt.contour处于相同的颜色级别?例如,我的代码就是这样的情节:

enter image description here

制作第一个子图,我用

cs=m[0].scatter(xs,ys,c=obsData,cmap=plt.cm.jet)
m.colorbar(cs)

要制作第二个子图,我使用

cs2=m[1].contourf(x,y,areaData,cmap=cs.cmap)

对于每个后续的子图,我使用

m[ind].contourf(x,y,areaData,cmap=cs.cmap,levels=cs2.levels

其中在循环中重新计算areaData。

我的问题是,如何强制第一个子图与其他子图具有相同的颜色?我正在寻找与levels=cs2.levels关键字参数等效的等价物。

1 个答案:

答案 0 :(得分:1)

正如您在评论中所述,您的散点图和轮廓数据并不直接相关,但您希望将它们显示在同一色彩图上。

我建议设置一个包含两组数据的公共颜色范围。由于obsData指向散点并且areaData指向轮廓,因此我设置

vmin,vmax = (fun(np.concatenate([obsData,areaData])) for fun in (np.min,np.max))

确定收集的数据集的范围(显然,对多个输入数据集进行推广)。这些可以传递给scattercontourf来设置颜色映射的限制:

cs = m[0].scatter(xs,ys,c=obsData,cmap=plt.cm.viridis,vmin=vmin,vmax=vmax)
cs2 = m[1].contourf(x,y,areaData,cmap=cs.cmap,vmin=vmin,vmax=vmax)

有些手动增加跨度可能是为了获得漂亮的结果。

请注意,我将色彩映射更改为viridis。如果您真的想公平地表示您的数据,this should be your first step

相关问题