lfo*_*-po 4 python matplotlib heatmap subplot seaborn
我正在尝试绘制一个包含两个子图、一个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])
Run Code Online (Sandbox Code Playgroud)
@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])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3467 次 |
最近记录: |