Метки осей X не отображаются при использовании вспомогательных участков - PullRequest
0 голосов
/ 04 апреля 2019

Мои метки x не отображаются на вспомогательных участках, хотя я явно дал команду matplotlib их рисовать.

Сначала я подозревал, что на других графиках их ярлыки скрыты на нижнем участке, поэтому яиспользовал plt.tight_layout (), чтобы добавить дополнительное пространство между вложенными участками, но я все еще не вижу свои метки x, только больше пробелов.Я подозреваю, что пробел скрывает мои метки, но я не уверен.

Если я транспонирую массив подзаголовков, метки появляются, но это нарушает требования, над которыми я работаю.

import datetime as dt
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

FOR = '15'
SAT = "J02"
ranges = np.array([[-1000, 1000], [-1000, 1000]])
Final= pd.DataFrame(np.random.uniform(ranges[:, 0], ranges[:, 1], size=(30, ranges.shape[0])), columns=('In_Track','Cross_Track'))
LifeTime = pd.DataFrame(np.random.uniform(ranges[:, 0], ranges[:, 1], size=(4000, ranges.shape[0])), columns=('In_Track','Cross_Track'))
Hundred = pd.DataFrame(np.random.uniform(ranges[:, 0], ranges[:, 1], size=(300, ranges.shape[0])), columns=('In_Track','Cross_Track'))
Final.insert(0, 'd', [dt.datetime(2001,9,11)]*len(Final))
LifeTime.insert(0, 'd', [dt.datetime(2001,9,11)]*len(LifeTime))
Hundred.insert(0, 'd', [dt.datetime(2001,9,11)]*len(Hundred))

ThreePanel, (ax1a, ax2a, ax3a) = plt.subplots(nrows=3, ncols=1, sharex=False, sharey=True, figsize=(10.8, 19.2), dpi=100)
datestring="02-29-2016"
ax1a.plot(range(1, 31), Final['In_Track'], 'b-*', label='inTrack')
ax1a.plot(range(1, 31), Final['Cross_Track'], 'r-*', label=' xTrack')
yrange = [-3000,3000]
ax1a.set_ylim(yrange)
ax1a.grid(True)
ax1a.set_ylabel('Angle   ['+r'$\mu$'+ 'rad]')
ax1a.set_xlabel('FOR Scan Position')
ax1a.set_title('Geolocation Accuracy relative to VIIRS\nfor' + ' ' + SAT + ' on ' + datestring)
ax1a.legend(loc='best')
ax1b = ax1a.twinx()   # mirror them
ax1b.set_ylim(np.array(yrange)/16808. * 100.)
ax1b.set_ylabel('Percentage of FOV Size [%]')#\nfootprint semiaxes ranges from 14x14km at FOR 15 to 48x24km at FORs 1 & 30')
ax1b.set_xlabel('FOR Scan Position')

LifeTime.plot(kind='line', y='In_Track', ax=ax2a)
LifeTime.plot(kind='line', y='Cross_Track', ax=ax2a)
ax2a.set_xlabel('Date')
yrange = [-3000, 3000]
ax2a.set_ylim(yrange)
ax2a.set_ylabel('Angle   ['+r'$\mu$'+ 'rad]')
ax2a.grid(True)
ax2b = ax2a.twinx() #mirror yaxis
ax2b.set_ylim(np.array(yrange)/16808. * 100.)
ax2b.set_ylabel('Percentage of FOV Size [%]')
ax2b.axhline(y=10.7, c ='m', ls='--')
ax2b.axhline(y=-10.7, c ='m', ls='--')
DateDiff = '300 Days'
ax2a.set_title(DateDiff + ' of Geolocation Accuracy relative to VIIRS for FOR Scan Position: ' + FOR)

#ax3a = plt.subplot(3,1,3, sharex=None)
Hundred.plot(kind='line', y='In_Track', ax=ax3a)
Hundred.plot(kind='line', y='Cross_Track', ax=ax3a)
ax3a.set_xlabel('Date')
yrange = [-3000, 3000]
ax3a.set_ylim(yrange)
ax3a.set_ylabel('Angle   ['+r'$\mu$'+ 'rad]')
ax3a.grid(True)
ax3b = ax3a.twinx() #mirror yaxis
ax3b.set_ylim(np.array(yrange)/16808. * 100.)
ax3b.set_ylabel('Percentage of FOV Size [%]')
DateDiff = '100 Days'
ax3a.set_title(DateDiff + ' of Geolocation Accuracy relative to VIIRS for FOR Scan Position: ' + FOR)
ThreePanel.tight_layout(pad=0.4, w_pad=0.5, h_pad=10)

outfilename = 'Reproducible.png'
plt.savefig(outfilename)

В моем приведенном выше воспроизводимом коде я установил явные метки x для каждого из 3 различных участков.Однако только самый нижний участок отображает свои метки x.

1 Ответ

0 голосов
/ 05 апреля 2019

Не спрашивайте меня об особенностях, но вызов метода plot для информационных фреймов делает все виды неизвестного форматирования за кулисами.Если вместо этого вы выводите данные из метода axis.plot, все отображается, хотя вам придется изменить настройки макета:

# LifeTime.plot(kind='line', y='In_Track', ax=ax2a)
# LifeTime.plot(kind='line', y='Cross_Track', ax=ax2a)
ax2a.plot(LifeTime.index, LifeTime.In_Track)
ax2a.plot(LifeTime.index, LifeTime.Cross_Track)

# Hundred.plot(kind='line', y='In_Track', ax=ax3a)
# Hundred.plot(kind='line', y='Cross_Track', ax=ax3a)
ax3a.plot(Hundred.index, Hundred.In_Track)
ax3a.plot(Hundred.index, Hundred.Cross_Track)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...