Я хочу построить серию линейных графиков на сетке подсети, используя matplotlib. Однако верхняя правая часть сетки является повторением нижнего левого угла, поэтому я хочу оставить верхний правый угол. Я прилагаю png-образ того, что я ищу. Можно ли сделать что-то подобное с помощью matplotlib?
Было бы также полезно, чтобы оси были помечены, но с использованием подзаголовков это не сложно.
Для заинтересованных, это серия фазовых диаграмм для химической реакционной системы с четырьмя переменными. Я рисую каждую переменную против другой. Обратите внимание, что основная диагональ представляет собой переменную, построенную против самого себя, что, вероятно, также может быть опущено.
Код, который я использую в данный момент, может быть не так полезен, чтобы смотреть, но это то, что я использовал для создания полной сетки 4 на 4, я бы хотел сделать 4 на 4, а верхний правый блок остался без внимания. Обратите внимание, что если я не буду строить некоторые ячейки сетки, я все равно буду показывать оси, возможно, я смогу превратить очертания осей для этих подсетей?
plt.subplots(4,4,figsize=(9,6))
slist = ['S1', 'S2', 'S3', 'S4']
count = 1
for i in range (4):
for j in range (4):
r.reset()
m = r.simulate (0, 80, 2000, [slist[i], slist[j]])
plt.subplot (4,4,count)
plt.plot (m[:,0], m[:,1])
count += count
plt.show()
Следующая строка вызывает симулятор, который возвращает два столбца для выбранных в данный момент переменных. Это неэффективно, поскольку я мог бы быть, потому что я действительно должен называть его один раз со всеми переменными, а затем выделять те, которые я хочу на каждом сюжете. Но это был всего лишь прототип для экспериментов с графикой. Оптимизация может произойти позже. Переменная r является ссылкой на simulstor.
m = r.simulate (0, 80, 2000, [slist[i], slist[j]])
Я только что открыл это:
ax = plt.subplot (4,4,count)
plt.plot (m[:,0], m[:,1])
if count in [2,3,4,7,8,12]:
ax.set_visible(False)
Это просто, но нужно будет обобщить.
Окончательный код, который хорошо работает и основан на ответе Кота Мори, который также включает маркировку осей:
slist = ['S1', 'S2', 'S3', 'S4']
m = r.simulate (0, 80, 2000, slist)
fig = plt.figure(figsize=(9,6))
fig.tight_layout()
count = 0
for i in range(4):
for j in range(4):
count += 1
if i >= j:
ax = fig.add_subplot(4, 4, count)
ax.set_xlabel (slist[i])
ax.set_ylabel (slist[j])
ax.plot (m[:,i], m[:,j])
Вы можете использовать add_subplot
чтобы добавить только те ячейки, которые вам нужны.
fig = plt.figure(figsize=(9, 6))
count = 0
for i in range(4):
for j in range(4):
count += 1
if i >= j:
ax = fig.add_subplot(4, 4, count)
ax.text(0.5, 0.5, str(count))
Можете ли вы попробовать это?
plt.subplots(4,4,figsize=(9,6))
slist = ['S1', 'S2', 'S3', 'S4']
for i in range (4):
for j in range (4):
if i>=j:
pos = i*4+j+1
r.reset()
m = r.simulate (0, 80, 2000, [slist[i], slist[j]])
plt.subplot (4,4,pos)
plt.plot (m[:,0], m[:,1])
plt.show()