工作示例
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 轴?
答案 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)
输出:
为了减少图之间的空间,您还可以使用 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()