我正在制作一个散点图,但是当我在两者之间切换时,mcolors.Normalize
两个mcolors.LogNorm
数字之间的颜色条不一致 - 我认为标准化颜色条刻度与对数标准化刻度大致相同(例如,在主要间隔 10^1、10^2、10^3 等)。难道不是这样吗?换句话说 - 颜色条是否给了我相同的答案?提前致谢!
import matplotlib.pyplot as plt # v3.5.2
import seaborn as sns # v0.11.2
import numpy as np # v1.22.1
import matplotlib.colors as mcolors
# generate data
x = np.random.normal(size=100000)
y = x * 3 + np.random.normal(size=100000)
def scatter2d(x, y, norm=mcolors.LogNorm):
"""Create a plt.2dhist with marginal histogram."""
ax1 = sns.jointplot(x=x, y=y, marginal_kws={'bins' : 50})
ax1.fig.set_size_inches(5, 4)
ax1.ax_joint.cla()
plt.sca(ax1.ax_joint)
plt.hist2d(x, y, 50, norm=norm(), cmin=1,
cmap='plasma', range=None )
# set up scale bar legend
cbar_ax = ax1.fig.add_axes([1, 0.1, 0.03, 0.7])
cb = plt.colorbar(cax=cbar_ax)
cb.set_label(f'Density of points ({norm.__name__})', fontsize=13)
pass
scatter2d(x, y)
scatter2d(x, y, norm=mcolors.Normalize)
这是规范正在做什么的可视化。
我稍微简化了您的代码,因为 Seaborn 并未真正用于解决特定问题(并且您似乎正在运行非常旧的版本,尽管主要原则保持不变)。固定种子有助于提高再现性。
在颜色条上设置相同的刻度,显示对数范数如何拉伸较低值,并缩小较高值的空间。因此,它显示了 2D 直方图的更多细节。底部的曲线显示了 y 轴上的这种变换作为输入值(在本例中为 2d bin 的高度)的函数。
请注意,这些规范是有点不寻常的函数,因为它们在第一次运行时会在内部更新最小值和最大值(vmin 和 vmax)。
这是一个不同的可视化(具有不同的输入),显示每个单元格的计数。较少的细分可以让文本适合单元格。对数范数有更多不同的颜色。