在matplotlib中绘制具有固定限制的自动缩放的子图

时间:2012-11-28 19:11:05

标签: python numpy matplotlib scipy

在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。

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

1 个答案:

答案 0 :(得分:4)

Matplotlib/Pyplot: How to zoom subplots together?

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)
     

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

# 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)