我对python很新。目前使用matplotlib我有一个脚本,返回可变数量的子图,我将传递给另一个脚本进行绘图。我想把这些子情节安排成一个很好的安排,即“最接近正方形的东西”。所以答案是独一无二的,比方说我的重量列数更高
示例:假设我有6个图表,我需要的网格是2x3。如果我有9,它是3x3。如果我有12,它是3x4。如果我有17,它是4x5,但最后一行只创建了一个。
尝试解决方案:我可以轻松找到最接近的方块:
num_plots = 6
square_size = ceil(sqrt(num_plots))**2
但这会留下空洞。有没有办法制作正确的网格尺寸?
答案 0 :(得分:2)
这就是我过去做过的事情
num_plots = 6
nr = int(num_plots**0.5)
nc = num_plots/nr
if nr*nc < num_plots:
nr+=1
fig,axs = pyplot.subplots(nr,nc,sharex=True,sharey=True)
答案 1 :(得分:2)
如果您有5或7等素数的素数,除非您去一行或一列,否则无法做到。如果有9或15个图,它应该可以工作。
以下示例显示了如何
这是:
nplots=13
#find number of columns, rows, and empty plots
nc=int(nplots**0.5)
nr=int(ceil(nplots/float(nc)))
empty=nr*nc-nplots
#make the plot grid
f,ax=pyplot.subplots(nr,nc,sharex=True)
#force ax to have two axes so we can index it properly
if nplots==1:
ax=array([ax])
if nc==1:
ax=ax.reshape(nr,1)
if nr==1:
ax=ax.reshape(1,nc)
#hide the unused subplots
for i in range(empty): ax[-(1+i),-1].axis('off')
#loop through subplots and make output
for i in range(nplots):
ic=i/nr #find which row we're on. If the definitions of ir and ic are switched, the indecies for empty (above) should be switched, too.
ir=mod(i,nr) #find which column we're on
axx=ax[ir,ic] #get a pointer to the subplot we're working with
axx.set_title(i)