首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个散点图的同色条子图海运

两个散点图的同色条子图海运
EN

Stack Overflow用户
提问于 2022-05-08 02:02:27
回答 2查看 90关注 0票数 0

我有以下代码来生成海运散点图:

代码语言:javascript
复制
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)应该在那个光谱中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-08 02:29:26

我通过在上面的每个散点图中添加参数hue_norm=norm来解决这个问题。这产生了以下产出数字:

票数 0
EN

Stack Overflow用户

发布于 2022-05-08 02:16:20

您应该在分散图中显式地指定vminvmax。对于你的案子,

代码语言:javascript
复制
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散射,这些参数可以指定vamxvmin值,从而确定颜色的值范围。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72157580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档