Python 相同颜色的散点图和等高线图
是否可以将Python 相同颜色的散点图和等高线图,python,matplotlib,colormap,Python,Matplotlib,Colormap,是否可以将plt.contourf和plt.contour强制分散成相同的颜色级别?例如,我有一段代码,可以绘制如下图: 要生成第一个子地块,我使用 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=c
plt.contourf
和plt.contour
强制分散成相同的颜色级别?例如,我有一段代码,可以绘制如下图:
要生成第一个子地块,我使用
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
对于每个后续子批次,我使用
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
关键字参数等效的参数。正如您在评论中所指出的,您的散射和等高线数据没有直接关系,但您希望将它们显示在同一颜色图上
我建议设置一个包含两组数据的通用颜色范围。由于obsData
指的是散布点,而areaData
指的是等高线,所以我将
vmin,vmax = (fun(np.concatenate([obsData,areaData])) for fun in (np.min,np.max))
确定收集的数据集的范围(显然,对于多个输入数据集是通用的)。这些可以传递到scatter
和tourtf
以设置颜色映射的限制:
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
。如果您确实想公平地表示您的数据,.散点图由obsData
着色,而等高线图则根据areaData
着色。sacatter图的值高于8,等高线值低于7。您确定这些数据对应于相同的数据集吗?否则,强制两者使用相同的颜色贴图是没有任何意义的。我遗漏了什么吗?它们不是来自同一个数据集,事实上,没有一个子地块来自同一个数据集。尽管存在这种差异,但obsData是模拟中观察到的误差数据,而areaData是包含模拟中因各种因素而产生的不确定性的数据。我想将误差与不确定度进行比较,但要正确地进行比较,需要均匀着色。