2

matplotlib 中制作一系列具有相同 X 和 Y 比例的子图的最佳方法是什么,但是这些子图是根据具有最极端数据的子图的最小/最大范围计算的?例如,如果您有一系列要绘制的直方图:

# my_data is a list of lists
for n, data in enumerate(my_data):
  # data is to be histogram plotted
  subplot(numplots, 1, n+1)
  # make histogram
  hist(data, bins=10)

然后,每个直方图的 X 轴和 Y 轴将具有不同的范围/刻度。我希望这些都是相同的,并根据绘制的直方图的最极端直方图限制进行设置。一种笨拙的方法是记录每个图的 X/Y 轴的最小值/最大值,然后在绘制后遍历每个子图,并在绘制后仅遍历它们的轴,但必须有更好的方法在 matplotlib 中。

这可以通过某些轴共享变体来实现吗?

4

1 回答 1

4

Matplotlib/Pyplot:如何将子图缩放在一起?

http://matplotlib.org/examples/pylab_examples/shared_axis_demo.html

http://matplotlib.org/users/recipes.html

引用最后一个链接:

Fernando Perez 提供了一个很好的顶级方法,可以一次在 subplots() 中创建所有内容(注意末尾的“s”),并关闭整个集合的 x 和 y 共享。您可以单独解压缩轴:

# new style method 1; unpack the axes
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
ax1.plot(x)

或者将它们作为支持 numpy 索引的 numrows x numcolumns 对象数组返回:

# new style method 2; use an axes array
fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)
axs[0,0].plot(x)

如果您有matplotlib以下方法的旧版本应该可以工作(也引用最后一个链接)

轻松创建子图 在 matplotlib 的早期版本中,如果您想使用 pythonic API 并创建一个图形实例,并从中创建一个子图网格,可能带有共享轴,它涉及相当多的样板代码。例如

# old style
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222, sharex=ax1, sharey=ax1)
ax3 = fig.add_subplot(223, sharex=ax1, sharey=ax1)
ax3 = fig.add_subplot(224, sharex=ax1, sharey=ax1)
于 2012-11-28T19:20:07.517 回答