Вопрос по matplotlib, customization, subplot, python – Matplotlib: Расположение подзаговора в сетке подзаговоров

7

Я пытаюсь сделать сюжет из 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')

Тем не менее, для публикации я думаю, что это выглядит немного уродливо - я бы хотел переместить последний участок в центр между двумя столбцами. Итак, каков наилучший способ отрегулировать положение последнего участка, чтобы он был отцентрирован? То есть иметь первые 6 вспомогательных участков в сетке 3X2 и последний вложенный участок внизу по центру между двумя столбцами. Если возможно, яЯ хотел бы иметь возможность сохранитьfor цикл, так что я могу просто использовать:

    if i == 6:
       # do something to reposition/centre this plot     

Спасибо,

Alex

это должна быть сетка 3х2? Harpal

Ваш Ответ

2   ответа
7

Если вы хотите сохранить цикл for, вы можете расположить свои участки с помощьюsubplot2grid, что позволяетcolspan параметр:

#! /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
    if i == 6:
        ax = subplot2grid((4,8), (i/2, 2), colspan=4)
    else:
        # You can be fancy and use subplot2grid for each plot, which dosen't
        # require keeping the iplot variable:
        # ax = 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")
savefig("subplots_example.png",bbox_inches='tight')

10

Использовать сетку(Док) с сеткой 4x4, и каждый график должен содержать 2 столбца:

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(4, 4)
ax1 = plt.subplot(gs[0, 0:2])
ax2 = plt.subplot(gs[0,2:])
ax3 = plt.subplot(gs[1,0:2])
ax4 = plt.subplot(gs[1,2:])
ax5 = plt.subplot(gs[2,0:2])
ax6 = plt.subplot(gs[2,2:])
ax7 = plt.subplot(gs[3,1:3])
fig = gcf()
gs.tight_layout(fig)
ax_lst = [ax1,ax2,ax3,ax4,ax5,ax6,ax7]
Очень хороший ответ! Спасибо! GoingMyWay
Это работает отлично. Вы можете контролировать расстояние между сетками, учитывая помеченную ось и т. Д., Используя стандартные методы matplotlib - IEfig = plt.figure(figsize=(10,15)) затем после вызова каждого участка / сеткиgs.tight_layout(fig) AGS

Похожие вопросы