Уменьшение количества тиков по оси X на графике Matplotlib от Panda

Мне нужно уменьшить или вручную установить количество тиков по оси x линейного графика Matplotlib. Этот вопрос задавался здесь много раз, я просмотрел столько ответов, сколько смог найти, и документы Matplotlib, и я не нашел решения, с которым мог бы работать, поэтому я надеюсь на некоторую помощь.

У меня есть словарь Python с двумя наборами пар key:value — datetime.datetime и float. В каждом наборе сотни значений, но вот фрагмент первых элементов просто для справки:

ws_kline_dict_01 = {'time': [datetime.datetime(2023, 2, 15, 10, 35, 8)], 'close': [22183.07]}

Я преобразовал этот словарь в фрейм данных Pandas, чтобы мне было легче его видеть в Jupyter, а также удалил год, месяц и день из «времени», используя:

df_kline_dict_01 = pd.DataFrame(ws_kline_dict_01)
df_kline_dict_01['time'] = df_kline_dict_01['time'].dt.strftime('%H:%M:%S')

Когда я рисую это с помощью Matplotlib, используя «время» в качестве оси x, оно печатает каждое значение в виде галочки, которая слишком загромождена (см. «График: формат Post-Panda» ниже).

Если я оставлю datetime.datetime в его исходной форме - Matplotlib, кажется, автоматически выбирает, сколько значений он отображает, и отображает "Day Hour:Minutes" вместо "Hour:Minutes:Seconds" - что у меня не работает (см. «Сюжет: формат Pre-Panda» ниже).

Я пробовал plt.locator_params(axis='x', nbins=n) - но это дает мне сообщение об ошибке:

"UserWarning: 'set_params()' not defined for locator of type <class 'matplotlib.category.StrCategoryLocator'>".

Для справки - это код, который я использую для создания сюжета:

plt.plot(df_kline_dict_01['time'], df_kline_dict_01['close'], color = 'green', label = 'close')
plt.xticks(rotation=45, ha='right')
plt.show()

Как (по крайней мере) уменьшить или (в идеале) явно установить количество значений/тиков, отображаемых на оси X? Похоже, это должна быть довольно простая задача форматирования, но пока она побеждает меня, и я был бы признателен за помощь в сортировке.

Сюжет: Формат Pre-Panda Сюжет: формат Post-Panda

Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
0
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Поместите некоторые параметры для таких мест, как $plt.xticks(np.arange(min,max,step),rotation=45, ha='right')$ заполните мин и макс и шаги, как вы хотите

Ответ принят как подходящий

Вот возможное решение с использованием метода .xaxis.set_major_locator(). Вы можете настроить переменную max_xticks в соответствии со своим вариантом использования.

...
df_kline_dict_01['time'] = df_kline_dict_01['time'].dt.strftime('%H:%M:%S')
fig, ax = plt.subplots()
ax.plot(df_kline_dict_01['time'], df_kline_dict_01['close'], color='green', label='close')

max_xticks = 6
ax.xaxis.set_major_locator(ticker.MaxNLocator(max_xticks))

plt.xticks(rotation=45, ha='right')
plt.show()

Примечание. Я присвоил max_xticks = 6, чтобы помочь вам понять код, в противном случае вы могли бы просто установить значение в .MaxNLocator(6) в следующей строке кода.

Другие вопросы по теме