一尘不染

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

python

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

是否可以通过某些共享轴的变体来实现?


阅读 229

收藏
2021-01-20

共1个答案

一尘不染

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)

如果您使用的是以下版本的旧版本,则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)
2021-01-20