具有相同颜色的散点图和等高线图
Scatter plot and contour plot with same colors
是否可以强制 plt.scatter
与 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
其中 areaData 在循环中重新计算。
我的问题是,如何强制第一个子图与其他子图具有相同的颜色?我正在寻找与 levels=cs2.levels
关键字参数等效的参数。
正如您在评论中指出的那样,您的散点图和等高线数据没有直接关系,但您希望将它们显示在同一个颜色图上。
我建议设置一个包含两组数据的通用颜色范围。由于 obsData
指的是散点, areaData
指的是等高线,所以我设置
vmin,vmax = (fun(np.concatenate([obsData,areaData])) for fun in (np.min,np.max))
确定收集的数据集的跨度(显然,要对多个输入数据集进行泛化)。这些可以传递给 scatter
和 contourf
以设置颜色映射的限制:
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.
是否可以强制 plt.scatter
与 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
其中 areaData 在循环中重新计算。
我的问题是,如何强制第一个子图与其他子图具有相同的颜色?我正在寻找与 levels=cs2.levels
关键字参数等效的参数。
正如您在评论中指出的那样,您的散点图和等高线数据没有直接关系,但您希望将它们显示在同一个颜色图上。
我建议设置一个包含两组数据的通用颜色范围。由于 obsData
指的是散点, areaData
指的是等高线,所以我设置
vmin,vmax = (fun(np.concatenate([obsData,areaData])) for fun in (np.min,np.max))
确定收集的数据集的跨度(显然,要对多个输入数据集进行泛化)。这些可以传递给 scatter
和 contourf
以设置颜色映射的限制:
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.