我有以下代码来生成海运散点图:
sns.set(
rc={"figure.figsize": (12.27, 4.27), "figure.dpi": 300, "savefig.dpi": 300},
font_scale=0.5,
style="white",
context="talk",
)
fig, ax = plt.subplots(1, 2)
sns.scatterplot(
data=df1,
x="PCA-1 (morgan)",
y="PCA-2 (morgan)",
hue="uncertainty",
palette="Set2_r",
ax=ax[0],
)
ax[0].set_xlabel("PCA-1 (Morgan)")
ax[0].set_ylabel("PCA-2 (Morgan)")
norm = plt.Normalize(0, df1["uncertainty"].max(),)
sm = plt.cm.ScalarMappable(cmap="Set2_r", norm=norm)
sm.set_array([])
# ax[0].get_legend().remove()
sns.scatterplot(
data=df2,
x="PCA-1 (morgan)",
y="PCA-2 (morgan)",
hue="uncertainty",
palette="Set2_r",
ax=ax[1],
)
ax[1].set_xlabel("PCA-1 (Morgan)")
ax[1].set_ylabel("PCA-2 (Morgan)")
# ax[1].get_legend().remove()
fig.colorbar(sm, ax=ax.flatten(), orientation="vertical")上面的代码生成以下图片:

正如你所看到的,左边的图有一个标尺,它的范围(24,48)是我使用的色调-- uncertainty。我使用plt.Normalize函数从(0,48)中规范化。然而,右边的图有一个范围(0.6,1.6),但是如果你仔细地看它,它是用整个颜色图来着色数据点,而不是因为这个范围而在灰色的颜色区域受到限制。我怎样才能用正确的颜色画出灰色的点,因为范围(0.6,1.6)应该在那个光谱中?
发布于 2022-05-08 02:29:26
我通过在上面的每个散点图中添加参数hue_norm=norm来解决这个问题。这产生了以下产出数字:

发布于 2022-05-08 02:16:20
您应该在分散图中显式地指定vmin和vmax。对于你的案子,
vmin, vmax = df1.uncertainty.min(), df1.uncertainty.max()
sns.scatterplot(
data=df1,
...
ax=ax[0],
vmin = vmin,
vmax = vmax
)
sns.scatterplot(
data=df2,
...
ax=ax[1],
vmin = vmin,
vmax = vmax
)正如海路散射图文档中所指出的,任何其他参数都会传递给Matplotlib散射,这些参数可以指定vamx和vmin值,从而确定颜色的值范围。
https://stackoverflow.com/questions/72157580
复制相似问题