在Matplotlib中使用子图时如何控制颜色条位置

时间:2019-04-10 08:00:00

标签: python matplotlib

我正在尝试使用Matplotlib绘制时间序列及其频谱图和相关的颜色条。

以下是MCVE:

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as scignal
import random

array=np.random.random(10000)
t,f,Sxx=scignal.spectrogram(array,fs=100)

plt.subplot(211)
plt.plot(array)
plt.subplot(212)
plt.pcolormesh(Sxx)
plt.colorbar()

此代码产生下图:

enter image description here

但是,我希望两个子图具有相同的大小:

enter image description here

我考虑过使用plt.colorbar(orientation='horizontal')来更改颜色条的方向,但是由于子图的高度不同,我对结果不满意。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

发生这种情况的原因是plt.colorbar创建了一个 new Axes对象,该对象从较低的Axes“窃取”了空间(这是导致水平色条也会影响两个原始图)。

有几种方法可以解决此问题;一种是用四个Figure创建一个Axes,将大部分空间分配给左边的空间,然后使其中一个不可见:

import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as scignal
import random

array = np.random.random(10000)
t, f, Sxx = scignal.spectrogram(array,fs=100)

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(5, 6), gridspec_kw={'width_ratios': [19, 1]})
(ax1, blank), (ax2, ax_cb) = axes
blank.set_visible(False)
ax1.plot(array)
m = ax2.pcolormesh(Sxx)
fig.colorbar(m, cax=ax_cb)

enter image description here