Matplotlib - Python не может показывать метки второстепенных тиков каждый месяц - PullRequest
0 голосов
/ 08 мая 2018

Это мой код:

from matplotlib.ticker import FuncFormatter
import pandas as pd
import numpy as np
from datetime import datetime
from matplotlib import pyplot as plt

dates = pd.date_range('01/01/2016', datetime.today(), freq = 'M')
X = pd.DataFrame(index = dates)
X['values'] = np.random.rand(len(X)) * 300

fig, ax = plt.subplots()
fig.set_size_inches(8 * phi, 8 )
X['values'].plot(ax = ax)
ax.yaxis.set_major_formatter(FuncFormatter(lambda x, pos: '$ {:,.0f}'.format(x)))
plt.show()

Can't show every month

Я уже полчаса пытаюсь, и мне очень нужна помощь с этим.

Какой самый простой и понятный способ показать остальные месяцы на ярлыках второстепенных тиков для xaxis? Вместо того, что он хочет сделать по какой-то причине, покажите только месяцы, которые начинаются с J ....

Примечания. У меня установлен морской транспорт.

1 Ответ

0 голосов
/ 08 мая 2018

Во-первых, чтобы иметь возможность использовать тикеры matplotlib на графиках дат панд, вам нужно установить опцию совместимости x_compat=True.

X.plot(ax = ax, x_compat=True)

Далее, чтобы отформатировать ось x, вам нужно использовать xaxis. Чтобы установить второстепенные метки, вам нужно использовать set_minor_formatter.

Чтобы назначить несколько тиков на определенные позиции, вам нужно Locator, а не Formatter.

Теперь кажется, что вы хотите полностью контролировать выходной график, поэтому вам нужно установить основные и второстепенные локаторы и форматеры.

Обратите внимание, что маркировка каждый месяц обязательно позволит этикеткам перекрываться. Таким образом, потребуется более крупная фигура или меньший размер шрифта.

fig, ax = plt.subplots(figsize=(12,3))

X.plot(ax = ax, x_compat=True)

ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_minor_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter("\n%Y"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%b"))

plt.setp(ax.get_xticklabels(), rotation=0, ha="center")
plt.show()

enter image description here

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