Python Matplotlib散点图,具有跨子地块的标准化颜色贴图

Python Matplotlib散点图,具有跨子地块的标准化颜色贴图,python,matplotlib,heatmap,colorbar,scatter,Python,Matplotlib,Heatmap,Colorbar,Scatter,我想比较两组数据。每组数据都有x和y值以及每个x、y点的一些z值。两个数据集之间的z值分布可能相互重叠,但通常会有不重叠的部分。在这种情况下[1,4]和[2,6]。我想让配色方案考虑到这一点,这样我可以在比较两组时直观地看到这些差异。我最终想使用一个颜色条添加到这个数字以及。 一些示例代码: # Fake Values vals1 = np.array([[1,1,1],[2,2,4]]) vals2 = np.array([[1,1,2],[2,2,6]]) fig, ax = plt.su

我想比较两组数据。每组数据都有x和y值以及每个x、y点的一些z值。两个数据集之间的z值分布可能相互重叠,但通常会有不重叠的部分。在这种情况下[1,4]和[2,6]。我想让配色方案考虑到这一点,这样我可以在比较两组时直观地看到这些差异。我最终想使用一个颜色条添加到这个数字以及。 一些示例代码:

# Fake Values
vals1 = np.array([[1,1,1],[2,2,4]])
vals2 = np.array([[1,1,2],[2,2,6]])

fig, ax = plt.subplots(1,2, constrained_layout=True)
g1 = ax[0].scatter(x=vals1[:,0], y=vals1[:,1], c=vals1[:,2], cmap='RdBu')
g2 = ax[1].scatter(x=vals2[:,0], y=vals2[:,1], c=vals2[:,2], cmap='RdBu')
fig.colorbar(g2)
这给了我以下信息:

如您所见,子批次之间的z(c?)值未标准化。
非常感谢您的帮助。

您可以将两个图的
vmin
/
vmax
设置为数据的全局最小值/最大值

分别设置
vmin
/
vmax
参数:

vmin=np.vstack([vals1,vals2]).min()
vmax=np.vstack([vals1,vals2]).max()
图,ax=plt.子批次(1,2,受约束的_布局=真)
g1=ax[0]。散布(x=vals1[:,0],y=vals1[:,1],c=vals1[:,2],vmin=vmin,vmax=vmax,cmap='RdBu')
g2=ax[1]。散布(x=vals2[:,0],y=vals2[:,1],c=vals2[:,2],vmin=vmin,vmax=vmax,cmap='RdBu')
图颜色条(g2)
或者创建一个实例并将其用于
norm
param:

norm=mcolors.Normalize(
vmin=np.vstack([vals1,vals2]).min(),
vmax=np.vstack([vals1,vals2]).max(),
)
图,ax=plt.子批次(1,2,受约束的_布局=真)
g1=ax[0]。散布(x=vals1[:,0],y=vals1[:,1],c=vals1[:,2],norm=norm,cmap='RdBu')
g2=ax[1]。散布(x=vals2[:,0],y=vals2[:,1],c=vals2[:,2],norm=norm,cmap='RdBu')
图颜色条(g2)

您也可以在呼叫之外创建
Norm
以分散并将其传递给他们两人。您好@tdy,谢谢您的回复!看起来我的原始代码中有打字错误,这在你的回复中被重述了一遍。如果将g2行中的c值更改为:c=vals2[:,2],则该值将是正确的!