Matplotlib: комбинация перевернутых участков - PullRequest
1 голос
/ 04 ноября 2019

Мне нужно добиться следующего эффекта с помощью matplotlib:

enter image description here

Как вы можете видеть, это комбинация графиков в разных квадрантах.

Я знаю, как генерировать каждый квадрант индивидуально. Например, для построения квадранта «x инверт» я бы просто использовал:

plt.plot(x, y)
plt.gca().invert_yaxis()
plt.show()

, чтобы нарисовать график. Он правильно инвертирует ось x. Тем не менее, это только сгенерирует график верхнего левого квадранта для меня.

Как мне создать комбинацию графиков, описанных на картинке выше? У каждого квадранта есть свой сюжет с разными перевернутыми осями.

Моя лучшая идея заключалась в том, чтобы объединить его с каким-нибудь инструментом, таким как Paint.

1 Ответ

1 голос
/ 04 ноября 2019

У меня недостаточно репутации, чтобы добавить комментарий для добавления в комментарий ImportanceOfBeingErnest, но когда вы создадите 4 вспомогательных участка, вы захотите удалить пространство между графиками, а также иметь общие оси (и очистить перекрытия)ticks).

Существуют различные способы создания подзаговоров, но я предпочитаю gridspec. Вы можете создать сетку 2x2 с помощью gridspec и сделать все это, вот пример:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure()

# lines to plot
x = np.arange(0, 10)
y = np.arange(0, 10)

# gridspec for 2 rows, 2 cols with no space between
grid = gridspec.GridSpec(nrows=2, ncols=2, hspace=0, wspace=0, figure=fig)

x_y = fig.add_subplot(grid[0, 1], zorder=3)
x_y.plot(x, y)
x_y.margins(0)

invx_y = fig.add_subplot(grid[0, 0], zorder=2, sharey=x_y)
invx_y.plot(-x, y)
invx_y.margins(0)

invx_invy = fig.add_subplot(grid[1, 0], zorder=0, sharex=invx_y)
invx_invy.plot(-x, -y)
invx_invy.margins(0)

x_invy = fig.add_subplot(grid[1, 1], zorder=1, sharey=invx_invy, sharex=x_y)
x_invy.plot(x, -y)
x_invy.margins(0)

# clean up overlapping ticks
invx_y.tick_params(labelleft=False, length=0)
invx_invy.tick_params(labelleft=False, labelbottom=False, length=0)
x_invy.tick_params(labelbottom=False, length=0)

x_y.set_xticks(x_y.get_xticks()[1:-1])
invx_y.set_xticks(invx_y.get_xticks()[1:-1])
x_invy.set_yticks(x_invy.get_yticks()[1:-1])

plt.show()

Это дает следующий рисунок:

4 plots shared axes 2x2 gridspec example

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