我正在尝试用7个子图进行绘制。目前,我正在绘制两列,其中一列包含四幅图,另一列包含三幅图,即像这样:
我正在按照以下方式构建该图:
#! /usr/bin/env python
import numpy as plotting
import matplotlib
from pylab import *
x = np.random.rand(20)
y = np.random.rand(20)
fig = figure(figsize=(6.5,12))
subplots_adjust(wspace=0.2,hspace=0.2)
iplot = 420
for i in range(7):
iplot += 1
ax = fig.add_subplot(iplot)
ax.plot(x,y,'ko')
ax.set_xlabel("x")
ax.set_ylabel("y")
savefig("subplots_example.png",bbox_inches='tight')
但是,对于发布,我认为这看起来有点丑陋-我想做的是将最后一个子图移到两列之间的中间。那么,调整最后一个子图的位置使其居中的最佳方法是什么? IE。在3X2网格中具有前6个子图,而最后一个子图在两列之间居中。如果可能的话,我希望能够保留
for
循环,以便我可以简单地使用: if i == 6:
# do something to reposition/centre this plot
谢谢,
亚历克斯
最佳答案
如果要保留for循环,则可以使用subplot2grid
来布置图,该图允许使用colspan
参数:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(20)
y = np.random.rand(20)
fig = plt.figure(figsize=(6.5,12))
plt.subplots_adjust(wspace=0.2,hspace=0.2)
iplot = 420
for i in range(7):
iplot += 1
if i == 6:
ax = plt.subplot2grid((4,8), (i//2, 2), colspan=4)
else:
# You can be fancy and use subplot2grid for each plot, which doesn't
# require keeping the iplot variable:
# ax = plt.subplot2grid((4,2), (i//2,i%2))
# Or you can keep using add_subplot, which may be simpler:
ax = fig.add_subplot(iplot)
ax.plot(x,y,'ko')
ax.set_xlabel("x")
ax.set_ylabel("y")
plt.savefig("subplots_example.png",bbox_inches='tight')
关于python - Matplotlib:在子图网格中重新定位子图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12372380/