PLT. в подзадаче работает только на один участок - PullRequest
0 голосов
/ 18 апреля 2020

Я новичок в python, поэтому я надеюсь, что мой вопрос достаточно хорош, я пытаюсь создать два вспомогательных участка на основе двух разных фреймов данных. Моя проблема в том, что когда я пытаюсь определить заголовки и xlim, он работает только на одном графике.

Это мой сценарий:

fig, axes = plt.subplots(1,2,figsize=(18,6))

#Original data
df_codes.loc[:,float_cols_gb].T.plot(ax=axes[0])
plt.title('Original Data', size=(20))
plt.ylabel('Reflectence', size=(14))
plt.xlabel('Wavelength', size=(14))
plt.xlim(410,1004)

#filter  data
df_bl_codes.loc[:,float_cols_bl].T.plot(ax=axes[1])
plt.title( 'Filter', size=(20))
plt.ylabel('Reflectence', size=(14))
plt.xlabel('Wavelength', size=(14))
plt.xlim(410,1004)

Я не могу прикрепить изображение, так как я здесь новый пользователь , но в результате получается два сюжета, один получает заголовки и xlim (тот, что в столбце 1), а другой остается без тайлов и xlim (тот, что в столбце 0).

Моя конечная цель: подать заявку xlimand также названия для каждого сюжета в подзаговорах.

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Давайте попробуем понять, что происходит, и помочь вам улучшить способ создания ваших графиков в будущем.

Линия

fig, axes = plt.subplots(1,2,figsize=(18,6))

создает два объекта (все в Python является объектом): объект matplotlib.pyplot.Figure и список, содержащий два объекта matplotlib.pyplot.Axes. Когда вы затем сделаете что-то вроде plt.title('Original Data', size=(20)), matplotlib добавит этот заголовок к тому, что он считает текущим Axes объектом - так как вы не сказали matplotlib, что это за объект, он будет Предположим, что это первый в массиве, который он только что создал. Если вы не укажете обратное (с помощью plt.sca(), но есть лучший способ), всегда примет это, а последующие вызовы plt.title() перезапишут предыдущее значение.

Чтобы исправить это, используйте встроенные методы непосредственно для объектов Axes. Вы можете получить к ним доступ, проиндексировав список axes:

fig, axes = plt.subplots(1,2,figsize=(18,6))

#Original data
df_codes.loc[:,float_cols_gb].T.plot(ax=axes[0])
axes[0].title('Original Data', size=(20))
axes[0].set_ylabel('Reflectence', size=(14))
axes[0].set_xlabel('Wavelength', size=(14))
axes[0].set_xlim(410,1004)

#filter  data
df_bl_codes.loc[:,float_cols_bl].T.plot(ax=axes[1])
axes[1].set_title( 'Filter', size=(20))
axes[1].set_ylabel('Reflectence', size=(14))
axes[1].set_xlabel('Wavelength', size=(14))
axes[1].set_xlim(410,1004)
0 голосов
/ 18 апреля 2020

В случае вспомогательных участков вы должны работать с экземплярами осей. Попытка сделать следующее:

fig, axes = plt.subplots(1,2,figsize=(18,6))

#Original data
df_codes.loc[:,float_cols_gb].T.plot(ax=axes[0])
ax[0].set_title('Original Data', size=(20))
ax[0].set_ylabel('Reflectence', size=(14))
ax[0].set_xlabel('Wavelength', size=(14))
ax[0].set_xlim(410,1004)

#filter  data
df_bl_codes.loc[:,float_cols_bl].T.plot(ax=axes[1])
ax[1].set_title( 'Filter', size=(20))
ax[1].set_ylabel('Reflectence', size=(14))
ax[1].set_xlabel('Wavelength', size=(14))
ax[1].set_xlim(410,1004)
...