在一个十六进制联合图中获取色条

13

我对使用 seaborn 的联合图来可视化两个numpy数组之间的相关性很感兴趣。我喜欢 kind='hex' 参数给出的视觉区别,但我也想知道不同阴影对应的实际计数。是否有人知道如何将此图例放在侧边栏甚至图中?我尝试查看文档但没有找到。


我也一直在寻找这个功能,似乎他们还没有实现它。如果你找到了解决方案,请告诉我。 - LearnOPhile
你应该直接使用 plt.hexbin,然后添加一个颜色条(我认为你所说的“图例”是指 plt.colorbar)。 - mwaskom
2个回答

15

编辑:已更新以适用于新版的Seaborn。

您需要通过使用 add_axes 创建一个新轴,并将该轴的名称传递给 plt.colorbar(),来手动完成它。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

x = np.random.normal(0.0, 1.0, 1000)
y = np.random.normal(0.0, 1.0, 1000)
hexplot = sns.jointplot(x, y, kind="hex")
plt.subplots_adjust(left=0.2, right=0.8, top=0.8, bottom=0.2)  # shrink fig so cbar is visible
# make new ax object for the cbar
cbar_ax = hexplot.fig.add_axes([.85, .25, .05, .4])  # x, y, width, height
plt.colorbar(cax=cbar_ax)
plt.show()

带有色条的Seaborn六边形图

来源:我曾经在阅读一位开发者说实现色条的

"工作/效益比太高了"

之后我几乎放弃了,但最终我在另一个问题中找到了这个解决方案。


1
@ryanjdillon 我更新了我的回答,并提供了一个完整的工作示例。你遇到的问题可能是colorbar被绘制到画布的右侧,所以我添加了一个subplots_adjust()行来解决这个问题。(FYI tight_layout与此Axes对象不兼容,因此不是选项) - crypdick
1
太棒了。感谢您如此迅速的回复!我会在周一试一下这个。 - ryanjdillon
@ryanjdillon 很高兴能帮上忙,如果你有任何问题请告诉我。 - crypdick
好的,谢谢。@crypdick - vicemagui
我该如何在这个图像的顶部添加一个标题?plt.title放置的位置确实不正确。 - seralouk
显示剩余3条评论

2
以下方法适用于我:

t1 = sns.jointplot(data=df, x="originalestimate_hours", y="working_hours_per_day_created_target", hue="status")
t1.ax_joint.legend_._visible=False
t1.fig.legend(bbox_to_anchor=(1, 1), loc=2)

1
这对我没用。我收到了一个错误信息AttributeError:'NoneType'对象没有属性'_visible' - Rylan Schaeffer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接