Почему я не прибавляю к l oop? - PullRequest
2 голосов
/ 06 августа 2020

Я новичок в программировании, могу ли я узнать, почему мой i не увеличивается в for l oop. Я хочу обновить название сюжета для каждого подзаговора. Спасибо. Скриншот кода

from matplotlib import pyplot as plt
fig= plt.figure()
fig,axes = plt.subplots(nrows=1, ncols=3,squeeze=False)
fig.tight_layout()

i=0
for current_ax in axes:
    current_ax[i].set_title(f"plot: {i}")
    i+=1

Ответы [ 3 ]

3 голосов
/ 06 августа 2020

Вам не нужно использовать current_axes[i], просто current_axes. Более того, вы можете заменить свой l oop на это:

for i, current_ax in enumerate(axes, 0):
    current_ax.set_title(f'Plot: {i}')

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

2 голосов
/ 06 августа 2020

Я бы рекомендовал использовать здесь enumerate, так как это считается больше Pythoni c, чем индексация.

Ниже показано, как вы должны установить оси title и :

import matplotlib.pyplot as plt

fig = plt.figure()
fig, axes = plt.subplots(nrows=1, ncols=3, squeeze=False)
fig.tight_layout()

# enumerate titles for each plot (blue boxes in output below)   
for i, ax in enumerate(axes.flat):
    ax.set_title(f'Title {i}')

# label x and y axis for each plot (red boxes in output below)
plt.setp(axes, xlabel='x axis label')
plt.setp(axes, ylabel='y axis label')

Вывод:

Вывод

2 голосов
/ 06 августа 2020

Это потому, что ваш массив осей похож на показанный ниже

[[<matplotlib.axes._subplots.AxesSubplot object at 0x000001DCA32BB2E0>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000001DCA54476A0>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000001DCA547D250>]]

, поэтому ваш массив имеет только один график с тремя объектами в нем. пока вы запускаете свой код, l oop будет выполняться только один раз. нет проблем с приращением счетчика. вы можете проверить это, напечатав i в конце l oop. поэтому, чтобы заставить этот код работать на вашем пути, сначала вытащите первый элемент из массива, который сделает массив осей с 3 объектами ie 3 графика.

from matplotlib import pyplot as plt
fig= plt.figure()
fig,axes = plt.subplots(nrows=1, ncols=3,squeeze=False)
fig.tight_layout()
i=0
print('figarray1',axes)
axes=axes[0]
print('figarray2',axes)
for current_ax in axes:
    current_ax.set_title(f"plot: {i}")
    i+=1
    print(i)
plt.show()

выходной график

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

Клеммный выход

figarray1 [[<matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEB72B2E0>
  <matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEF9266A0>
  <matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEF95D250>]]
figarray2 [<matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEB72B2E0>
 <matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEF9266A0>
 <matplotlib.axes._subplots.AxesSubplot object at 0x0000020AEF95D250>]
1
2
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...