共享动态创建的子图的 y 轴

时间:2021-04-14 23:00:50

标签: python matplotlib

工作示例

import matplotlib.pyplot as plt
names = ['one','two','three']
upper = [[79,85,88],[79,85,88],[79,85,88]]
lower = [[73,72,66],[73,72,66],[73,72,66]]
fig = plt.figure(1)
for idx,lane in enumerate(names):
    ax = fig.add_subplot(1,len(names)+1,idx+1)
    ax.plot(upper[idx], color='tab:blue', marker='x', linestyle="None")
    ax.plot(lower[idx], color='tab:blue', marker='x', linestyle="None")
    ax.set_title(lane)
plt.show()

这会动态生成 3 个图。它有效,我很可能没有使用动态生成图的最佳实践。目标是让所有生成的图共享 Y 轴,以便它看起来更干净。我查找的所有示例都表明您可以将共享轴分配给以前使用的轴,但在我的情况下,所有图都是动态创建的。有没有办法将图形中的所有子图合并为共享相同的 y 轴?

1 个答案:

答案 0 :(得分:1)

创建具有多个轴的图形的常用方法是 plt.subplots,它接受​​一个 sharey = True 参数。


示例:

import numpy as np
import matplotlib.pyplot as plt

xdata = np.linspace(0, 10, 100)
ydata_1 = np.sin(xdata)
ydata_2 = np.cos(xdata)

fig, (ax1, ax2) = plt.subplots(1, 2, sharey = True, figsize = (8, 4))
ax1.plot(xdata, ydata_1)
ax2.plot(xdata, ydata_2)

输出:

shared y axis plots

为了减少图之间的空间,您还可以使用 tight_layout = True 参数。


使用您的数据,您可以将其重写为类似的内容

fig, axes = plt.subplots(1, len(names), sharey = True, tight_layout = True)

for idx, (ax, name) in enumerate(zip(axes, names)):
    ax.plot(upper[idx], color='tab:blue', marker='x', linestyle="None")
    ax.plot(lower[idx], color='tab:blue', marker='x', linestyle="None")
    ax.set_title(name)

plt.show()