Как сделать два графика бок о бок с помощью Python?


94

Я нашел следующий пример на matplotlib:

import numpy as np
import matplotlib.pyplot as plt


x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'ko-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')


plt.subplot(2, 1, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')

plt.show()

У меня вопрос: что мне нужно изменить, чтобы участки располагались рядом?

Ответы:


148

Измените настройки подзаголовка на:

plt.subplot(1, 2, 1)

...

plt.subplot(1, 2, 2)

Параметры subplot: количество строк, количество столбцов и подзаговор, на котором вы сейчас находитесь. Это 1, 2, 1означает «цифра из 1 строки и 2 столбцов: перейдите к первому подзаговору». Затем 1, 2, 2означает «цифра в 1 строку, 2 столбца: перейдите ко второму подзаговору».

В настоящее время вы запрашиваете макет с двумя строками и одним столбцом (то есть один над другим). Вместо этого вам нужно попросить макет из 1 строки и 2 столбцов. Когда вы это сделаете, результат будет:

бок о бок сюжет

Чтобы свести к минимуму перекрытие подзаголовков, вы можете добавить:

plt.tight_layout()

перед шоу. Урожайность:

более аккуратный бок о бок сюжет


45

Проверьте эту страницу: http://matplotlib.org/examples/pylab_examples/subplots_demo.html

plt.subplotsпохож. Думаю, так лучше, так как параметры фигуры задавать проще. Первые два аргумента определяют макет (в вашем случае 1 строка, 2 столбца), а другие параметры изменяют такие функции, как размер фигуры:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 3))
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
fig.tight_layout()

введите описание изображения здесь


1
Есть ли еще способ сделать сюжет шире и выше?
Heißenberg93

Я не имею в виду commend plt.xlim / ylim
Heißenberg93

5
Я бы предложил использовать plt.subplots. Вы можете указать аргумент, figsizeчтобы определить размер фигуры. Как в plt.subplots(1, 2, figsize=(20, 4)). В противном случае, вы могли бы сначала определить фигуру и фигурное размер: plt.figure(figsize=(20, 4)).
busybear

По какой-то причине я получаю пустые данные, когда пытаюсь сохранить "plt.savefig ('.... png')" подзаголовок. Вначале я использую тот же код (я добавил только plt.figure (figsize = (7, 3))).
Heißenberg93

Вы звоните plt.savefigпосле plt.show? Если так, скорее всего, это ваша проблема.
busybear
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.