在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中。
是否可以通过某些共享轴的变体来实现?
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索引的numrow 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)
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索引的numrow 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
轻松创建子图在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)
轻松创建子图在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)