Измените оси на рисунке, используя matplotlib - PullRequest
0 голосов
/ 04 мая 2018

Я использую метод из библиотеки, который использовал matplotlib для генерации фигур.

получаю массив осей:

[<matplotlib.axes._axes.Axes at 0x117a32a90>,
 <matplotlib.axes._axes.Axes at 0x117bb1d68>,
 <matplotlib.axes._axes.Axes at 0x10bae8390>,
 <matplotlib.axes._axes.Axes at 0x10bb0add8>,
 <matplotlib.axes._axes.Axes at 0x10c153898>,
 <matplotlib.axes._axes.Axes at 0x1159412e8>,
 <matplotlib.axes._axes.Axes at 0x115964d30>]

На исходном рисунке все оси находятся в одном ряду (см. Первый рисунок и представьте, что у него есть две дополнительные оси справа). Я хотел бы изменить (а-ля numpy) фигуру, чтобы создать сетку осей (см. Вторую фигуру).

a

b

Возможно ли это?

Обновление - что я пробовал

После этого ответа я пытался использовать GridSpec:

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()

axs = #get list of axes

gs = gridspec.GridSpec(3,3)
for i in range(3):
    for j in range(3):
        k = i+j*3
        if k < len(axs):
            axs[k].set_position(gs[k].get_position(fig))    
            fig.add_subplot(gs[k])

Но это не работает, и у меня пока нет полного понимания GridSpec. На рисунке показано правильное количество вспомогательных участков, но оси не добавлены.

1 Ответ

0 голосов
/ 04 мая 2018

Я думаю, вы почти у цели. Не зная, какова твоя функция построения графиков, я просто сделал фиктивную для иллюстрации.

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec


def dummy_plots():
    """
    Return a 1d array of dummy plots.
    """
    _, ax_arr = plt.subplots(1, 9)

    for ax in ax_arr.flat:
        ax.plot([0, 1], [0, 1])

    return ax_arr


axs = dummy_plots()
fig = plt.gcf()

gs = gridspec.GridSpec(3,3)
for i in range(3):
    for j in range(3):
        k = i+j*3
        if k < len(axs):
            axs[k].set_position(gs[k].get_position(fig))

plt.show()

enter image description here

...