Отдельные сюжеты в одну фигуру с использованием matplotlib python - PullRequest
0 голосов
/ 04 сентября 2018

Цель состоит в том, чтобы создать одну фигуру с несколькими участками. Следующий код генерирует 4 отдельных графика

Подсписки к графику: можно ли использовать один и тот же цикл для обоих наборов данных? х против у и б против р Разница между двумя наборами данных: x против y составит 4 графика, а b против p - 2

.
x = [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y = [[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]

p = [[17, 16, 6, 15, 6, 7, 6, 7, 9, 11], [16, 13, 9, 11, 12, 13, 6, 12, 13, 7]]
b = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]

colours=['r','g','b','k'] 

Петля, которая их строит

for i in range(len(x)):
    plt.plot(x[i], y[i],colours[i])
    plt.show()

Можно ли создать функцию, которая перебирает каждый созданный график и добавляет его к одному рисунку или одному PDF-файлу, чтобы можно было просмотреть все 4 графика одновременно?

1 Ответ

0 голосов
/ 04 сентября 2018

Вот решение вашей проблемы с использованием subplots:

from matplotlib import pyplot as plt

x = [[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y = [[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
colours=['r','g','b','k']

fig, axes = plt.subplots(nrows=2, ncols=2)
i = 0 # moving index to plot different sublists of data 
for r in axes:
    for c in r:
        c.plot(x[i], y[i], color=colours[i], label='Sublist %d'%(i+1))
        i += 1
        c.legend()

plt.show()

Альтернативный подход, предложенный @ SpghttCd

for i, ax in enumerate(axes.flatten()):
    ax.plot(x[i], y[i], color=colours[i], label='Sublist %d'%(i+1))
    ax.legend()

выход

enter image description here

Набор данных 2 (как указано в комментариях ниже:

x = [[17, 16, 6, 15, 6], [7, 6, 7, 9, 11], [16, 13, 9, 11, 12], [13, 6, 12, 13, 7]] 
y = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]

Выход (Набор данных 2)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...