子图中的 Seaborn 热图 - 对齐 x 轴
Seaborn heatmaps in subplots - align x-axis
我正在尝试绘制一个包含两个 子图 、一个 seaborn 热图 和简单的 matplotlib 线 。然而,当两个图共享 x 轴时,它们没有对齐,如下图所示:
貌似和的问题类似,但是显示ax[0].get_xticks()
和ax[1].get_xticks()
的时候位置一样,所以不知道改什么。在我的图片中,偏差似乎超过 0.5 个偏移。
我做错了什么?
我用来绘制图形的代码如下:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
M_1=np.random.random((15,15))
M_2=np.random.random((15,15))
L_1=np.random.random(15)
L_2=np.random.random(15)
x=range(15)
cmap = sns.color_palette("hot", 100)
sns.set(style="white")
fig, ax = plt.subplots(2, 1, sharex='col', figsize=(10, 12))
ax[0].plot(x,L_1,'-', marker='o',color='tab:orange')
sns.heatmap(M_1, cmap=cmap, vmax=np.max(M_1), center=np.max(M_1)/2., square=False, ax=ax[1])
@Mr-T 的评论很到位。最简单的方法是预先创建坐标轴,而不是让 heatmap()
缩小坐标轴以便为颜色条腾出空间。
更复杂的是,热图的标签实际上并未放置在 [0,1,...] 处,而是位于 [0.5, 1.5, ...] 处每个单元格的中间。因此,如果您希望上图与底部的标签(以及每个单元格的中心)对齐,则可能需要将您的图向右移动 0.5 个单位:
M_1=np.random.random((15,15))
M_2=np.random.random((15,15))
L_1=np.random.random(15)
L_2=np.random.random(15)
x=np.arange(15)
cmap = sns.color_palette("hot", 100)
sns.set(style="white")
fig, ax = plt.subplots(2, 2, sharex='col', gridspec_kw={'width_ratios':[100,5]})
ax[0,1].remove() # remove unused upper right axes
ax[0,0].plot(x+0.5,L_1,'-', marker='o',color='tab:orange')
sns.heatmap(M_1, cmap=cmap, vmax=np.max(M_1), center=np.max(M_1)/2., square=False, ax=ax[1,0], cbar_ax=ax[1,1])
我正在尝试绘制一个包含两个 子图 、一个 seaborn 热图 和简单的 matplotlib 线 。然而,当两个图共享 x 轴时,它们没有对齐,如下图所示:
貌似和ax[0].get_xticks()
和ax[1].get_xticks()
的时候位置一样,所以不知道改什么。在我的图片中,偏差似乎超过 0.5 个偏移。
我做错了什么?
我用来绘制图形的代码如下:
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
M_1=np.random.random((15,15))
M_2=np.random.random((15,15))
L_1=np.random.random(15)
L_2=np.random.random(15)
x=range(15)
cmap = sns.color_palette("hot", 100)
sns.set(style="white")
fig, ax = plt.subplots(2, 1, sharex='col', figsize=(10, 12))
ax[0].plot(x,L_1,'-', marker='o',color='tab:orange')
sns.heatmap(M_1, cmap=cmap, vmax=np.max(M_1), center=np.max(M_1)/2., square=False, ax=ax[1])
@Mr-T 的评论很到位。最简单的方法是预先创建坐标轴,而不是让 heatmap()
缩小坐标轴以便为颜色条腾出空间。
更复杂的是,热图的标签实际上并未放置在 [0,1,...] 处,而是位于 [0.5, 1.5, ...] 处每个单元格的中间。因此,如果您希望上图与底部的标签(以及每个单元格的中心)对齐,则可能需要将您的图向右移动 0.5 个单位:
M_1=np.random.random((15,15))
M_2=np.random.random((15,15))
L_1=np.random.random(15)
L_2=np.random.random(15)
x=np.arange(15)
cmap = sns.color_palette("hot", 100)
sns.set(style="white")
fig, ax = plt.subplots(2, 2, sharex='col', gridspec_kw={'width_ratios':[100,5]})
ax[0,1].remove() # remove unused upper right axes
ax[0,0].plot(x+0.5,L_1,'-', marker='o',color='tab:orange')
sns.heatmap(M_1, cmap=cmap, vmax=np.max(M_1), center=np.max(M_1)/2., square=False, ax=ax[1,0], cbar_ax=ax[1,1])