为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Seaborn 和 Matplotlib 在热图和线图的共享子图中对齐 x 轴刻度线

使用 Seaborn 和 Matplotlib 在热图和线图的共享子图中对齐 x 轴刻度线

哔哔one 2022-09-27 16:08:57
使用具有共享 x 轴的 Seaborn 绘制热图和线图时,热图的刻度线被放置在热图条的中间。因此,底线图将继承热图刻度的位置和标签,而不是反映真实数据,因为线图刻度应从零开始。换句话说,我需要将两个图的刻度线从 x 轴原点开始(最佳),或者将线图向右移动热图像元宽度的一半,从而保留刻度位置和标签(hacky)。下面的代码快速重现了问题:f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)data_heat = np.random.rand(4, 6)data_line= np.random.randn(6,1)sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)sb.lineplot(data=data_line, ax=ax_line)
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

这是一个笨拙的解决方案,但您可以将x轴向左移动宽度的一半:


import numpy as np

import matplotlib.pyplot as plt

import seaborn as sb


f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)


data_heat = np.random.rand(4, 6)

data_line = np.random.randn(6,1)


# generalizable code regardless of spacing:

ax = sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)

width = ax.get_xticks()[1] - ax.get_xticks()[0]

new_ax = ax.get_xticks() - 0.5*width

ax.set_xticks(new_ax)

sb.lineplot(data=data_line, ax=ax_line)

plt.show()


查看完整回答
反对 回复 2022-09-27
?
撒科打诨

TA贡献1934条经验 获得超2个赞

要将两个绘图的刻度线从 x 轴原点开始,只需在代码末尾添加以下行:

plt.xticks(plt.xticks()[0] - 0.5)

解释:

plt.xticks()返回 x-tick 位置和标签,因此我们可以通过索引来访问这些位置。事实证明,这只是一个连续整数值的列表,因此我们可以通过减去0.5将它们向左移动半个级别。[0]

(部分复制自我对另一个问题的回答)


查看完整回答
反对 回复 2022-09-27
  • 2 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号