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

标签 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') 更改颜色条的方向但我对结果不满意,因为子图最终没有相同的高度。

任何帮助将不胜感激!

最佳答案

发生这种情况的原因是plt.colorbar创建一个 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

关于python - 在 Matplotlib 中使用子图时如何控制颜色条位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55607536/

相关文章:

Python - 创建 self 复制的类对象实例

python - Pandas + Matplotlib,让条形图中的一种颜色脱颖而出

python - 以高效/pythonic 方式从列表中生成以下子集

python - 如何创建一个 numpy 数组,其元素是其他 numpy 数组对象?

python - pyqt4的scrollArea事件和matplotlib的wheelEvent

python - Jupyter笔记本: interactive plot with widgets

python - 为什么按下 PyQt 按钮时 matplotlib 的计时器会加速?

python - matplotlib (python) - 在没有 pyplot 的情况下为多个图创建单个自定义图例

python - 如何将 easy_install 升级到 easy_install-3.4?

python - 如何使用flask mongoengine处理ReferenceField迁移?