Звучит так, будто вам нужны подзаговоры ... То, что вы делаете сейчас, не имеет особого смысла (или, во всяком случае, меня очень смущает ваш фрагмент кода ...). *
Попробуйте что-то еще подобное:
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(nrows=3)
colors = ('k', 'r', 'b')
for ax, color in zip(axes, colors):
data = np.random.random(1) * np.random.random(10)
ax.plot(data, marker='o', linestyle='none', color=color)
plt.show()
Edit:
Если вам не нужны подзаговоры, ваш фрагмент кода имеет гораздо больше смысла.
Вы пытаетесь добавить три оси прямо друг на друга. Matplotlib осознает, что уже есть подзаговор с таким же размером и расположением на фигуре, и поэтому каждый раз возвращает объект одного и того же . Другими словами, если вы посмотрите на свой список ax
, вы увидите, что все они один и тот же объект .
Если вы действительно хотите это сделать, вам нужно будет сбрасывать fig._seen
на пустой дикт каждый раз, когда вы добавляете оси. Вы, вероятно, на самом деле не хотите этого делать.
Вместо того, чтобы ставить три независимых графика друг на друга, взгляните на использование twinx
.
Е.Г.
import matplotlib.pyplot as plt
import numpy as np
# To make things reproducible...
np.random.seed(1977)
fig, ax = plt.subplots()
# Twin the x-axis twice to make independent y-axes.
axes = [ax, ax.twinx(), ax.twinx()]
# Make some space on the right side for the extra y-axis.
fig.subplots_adjust(right=0.75)
# Move the last y-axis spine over to the right by 20% of the width of the axes
axes[-1].spines['right'].set_position(('axes', 1.2))
# To make the border of the right-most axis visible, we need to turn the frame
# on. This hides the other plots, however, so we need to turn its fill off.
axes[-1].set_frame_on(True)
axes[-1].patch.set_visible(False)
# And finally we get to plot things...
colors = ('Green', 'Red', 'Blue')
for ax, color in zip(axes, colors):
data = np.random.random(1) * np.random.random(10)
ax.plot(data, marker='o', linestyle='none', color=color)
ax.set_ylabel('%s Thing' % color, color=color)
ax.tick_params(axis='y', colors=color)
axes[0].set_xlabel('X-axis')
plt.show()