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

使用具有共享 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)


哔哔one
浏览 217回答 2
2回答

紫衣仙女

这是一个笨拙的解决方案,但您可以将x轴向左移动宽度的一半:import numpy as npimport matplotlib.pyplot as pltimport seaborn as sbf,[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*widthax.set_xticks(new_ax)sb.lineplot(data=data_line, ax=ax_line)plt.show()

撒科打诨

要将两个绘图的刻度线从 x 轴原点开始,只需在代码末尾添加以下行:plt.xticks(plt.xticks()[0] - 0.5)解释:plt.xticks()返回 x-tick 位置和标签,因此我们可以通过索引来访问这些位置。事实证明,这只是一个连续整数值的列表,因此我们可以通过减去0.5将它们向左移动半个级别。[0](部分复制自我对另一个问题的回答)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python