Я пользователь Matlab, недавно преобразованный в Python. Большинство навыков Python, которыми я управляю самостоятельно, но с заговором я ударил по стене и нуждался в некоторой помощи.
Это то, что я пытаюсь сделать...
Мне нужно сделать фигуру, состоящую из 3 подзаголовков со следующими свойствами:
- макет подсети 311, 312, 313
- высота 312 и 313 составляет приблизительно половину 311
- все подзаголовки имеют общую ось X
- пространство между подзаголовками равно 0 (они касаются друг друга по оси X)
Кстати, я знаю, как сделать все это, только не в одной фигуре. Это проблема, с которой я сейчас сталкиваюсь.
Например, это мой идеальный макет подзаголовка:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2
fig = plt.figure()
ax1 = plt.subplot2grid((4,3), (0,0), colspan=3, rowspan=2)
ax2 = plt.subplot2grid((4,3), (2,0), colspan=3)
ax3 = plt.subplot2grid((4,3), (3,0), colspan=3)
ax1.plot(t,s1)
ax2.plot(t[:150],s2[:150])
ax3.plot(t[30:],s3[30:])
plt.tight_layout()
plt.show()
Обратите внимание, что ось x разных подзаговоров смещена. Я не знаю, как выровнять ось x на этом рисунке, но если я сделаю что-то вроде этого:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2
fig2, (ax1, ax2, ax3) = plt.subplots(nrows=3, ncols=1, sharex=True)
ax1.plot(t,s1)
ax2.plot(t[:150],s2[:150])
ax3.plot(t[30:],s3[30:])
plt.tight_layout()
plt.show()
Теперь ось x выровнена между подзаголовками, но все подсети имеют одинаковый размер (что не то, что я хочу)
Кроме того, я хотел бы, чтобы подзаголовки касались оси x следующим образом:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s1 = np.sin(2*np.pi*t)
s2 = np.exp(-t)
s3 = s1*s2
fig1 = plt.figure()
plt.subplots_adjust(hspace=0)
ax1 = plt.subplot(311)
ax2 = plt.subplot(312, sharex=ax1)
ax3 = plt.subplot(313, sharex=ax1)
ax1.plot(t,s1)
ax2.plot(t[:150],s2[:150])
ax3.plot(t[30:],s3[30:])
xticklabels = ax1.get_xticklabels()+ax2.get_xticklabels()
plt.setp(xticklabels, visible=False)
plt.show()
Чтобы перефразировать мой вопрос:
Я хотел бы использовать
plt.subplot2grid(..., colspan=3, rowspan=2)
plt.subplots(..., sharex=True)
plt.subplots_adjust(hspace=0)
и
plt.tight_layout()
вместе на том же рисунке. Как это сделать?