微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Matplotlib 散点图,具有跨子图的标准化颜色图

如何解决Matplotlib 散点图,具有跨子图的标准化颜色图

我有两组数据要比较。每组数据都有 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,2],6]])

fig,ax = plt.subplots(1,constrained_layout=True)
g1 = ax[0].scatter(x=vals1[:,0],y=vals1[:,c=vals1[:,cmap='RdBu')
g2 = ax[1].scatter(x=vals2[:,y=vals2[:,c=vals2[:,cmap='RdBu')
fig.colorbar(g2)

这给了我以下内容

Scatterplot with bad color scheme

如您所见,子图之间的 z (c?) 值未标准化。 任何帮助将不胜感激。

解决方法

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

单独设置 vmin/vmax 参数:

vmin = np.vstack([vals1,vals2]).min()
vmax = np.vstack([vals1,vals2]).max()

fig,ax = plt.subplots(1,2,constrained_layout=True)
g1 = ax[0].scatter(x=vals1[:,0],y=vals1[:,1],c=vals1[:,2],vmin=vmin,vmax=vmax,cmap='RdBu')
g2 = ax[1].scatter(x=vals2[:,y=vals2[:,c=vals2[:,cmap='RdBu')
fig.colorbar(g2)

或者创建一个 matplotlib.colors.Normalize() 实例并将其用于 norm 参数:

norm = mcolors.Normalize(
    vmin=np.vstack([vals1,vals2]).min(),vmax=np.vstack([vals1,vals2]).max(),)

fig,norm=norm,cmap='RdBu')
fig.colorbar(g2)

synced vmin/vmax

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。