Не удается скрыть метки осей подплота или установить MaxNLocator в matplotlib - PullRequest
3 голосов
/ 05 апреля 2019

В настоящее время я пытаюсь создать серию графиков X на 3 в matplotlib, недавно я делал похожие вещи, но эта специфическая двумерная форма метрик действительно бросает мне вызов по удалению меток осей или установке MaxNLocator.

В настоящее время каждый подлот все еще пытается показать метки X и Y самостоятельно. Используя тот же код, над которым я работаю, я не сталкиваюсь с этой проблемой вообще с моими 3 x 1 участками или с 1 x 1 участками. Кажется, это определенно, когда я прохожу маршрут X на 3 и предполагаю, что он связан с 2D.

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

plt.rcParams['figure.figsize'] = [18, 10]
fig, ax = plt.subplots(nrows=10, ncols=3)
for number, team in enumerate(team_dict.keys()):
    print(number,team)
    df = pd.DataFrame(data=team_dict[team])
    axy = ax[number // 3][number % 3]
    df = pd.pivot_table(df,values='count_events',index=['day'],columns=['level'])
    axy = df.plot(ax=axy)
    axy.legend().set_visible(False)
    axy.yaxis.set_major_locator(MaxNLocator(integer=True))
    axy.xaxis.label.set_visible(False)

Я тоже пытался это

for main_axis in ax:
    for axis in main_axis:
        if axis.lines:
            axis.get_xaxis().label.set_visible(False)
            axis.get_yaxis().set_major_locator(MaxNLocator(integer=True))
            axis.legend().set_visible(False)

        if not axis.lines:
            axis.set_visible(False)

Даже с этими попытками я все еще продолжаю получать это.

Sample Metric

Этот показатель должен охватывать 90 дней данных. Так что по оси X я просто хочу спрятать все вместе. С осью Y я хочу просто заставить целые числа. Я пытался сделать это и скрыть это безрезультатно. По какой-то причине в этом двумерном формате я не могу манипулировать надписями подзаговоров вообще.

Вот небольшой образец моего словаря

team_dict['Team1']
[{'day': datetime.datetime(2019, 4, 1, 19, 31, 46, 606217),
  'level': '5',
  'count_events': 1},
 {'day': datetime.datetime(2019, 4, 2, 19, 31, 46, 606217),
  'level': '5',
  'count_events': 1},
 {'day': datetime.datetime(2019, 4, 3, 19, 31, 46, 606217),
  'level': '5',
  'count_events': 1},
 {'day': datetime.datetime(2019, 4, 4, 19, 31, 46, 606217),
  'level': '5',
  'count_events': 1}]

team_dict['Team2']
[ {'day': datetime.datetime(2019, 3, 29, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 3, 30, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 3, 31, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 4, 1, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 4, 2, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 4, 3, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 11},
 {'day': datetime.datetime(2019, 4, 4, 19, 31, 46, 606217),
  'level': '4',
  'count_events': 10}]

1 Ответ

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

Чтобы скрыть метки на оси x (даты) и сделать ось y целым числом вместо плавающих точек.

ax = plt.axes()
ax.plot(np.random.rand(50))

ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())

Вот мой тестовый код (если ссылки выше не помогли вам):
Код (Jupyter Notebook)

import matplotlib.pyplot as plt
import numpy as np
nrows = 3
ncols = 4
f, axarr = plt.subplots(nrows, ncols,sharex=True, sharey=True)

for i in range(nrows):
    for j in range(ncols):
        axarr[i,j].plot(np.random.rand(50))
        #axarr[i,j].axis('off')
        axarr[i,j].yaxis.set_major_locator(plt.MaxNLocator(integer=True))
        axarr[i,j].xaxis.set_major_formatter(plt.NullFormatter())
f.suptitle("This is the title for whole figure", fontsize=16)

Выход:
enter image description here

Использование: axarr[i,j].yaxis.set_major_locator(plt.MaxNLocator(integer=True)) и plt.subplots(nrows, ncols,sharex=True, sharey=True), как указано выше.

Чтобы определить диапазон по оси Y, используйте:

axarr[i,j].set_ylim([0,max(your_y_axis_data_set)]) # change your_y_axis_data_set

Вы также можете передать разницу, рассчитать разницу тиков(отклонение от отметки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...