#python-3.x #matplotlib
#python-3.x #matplotlib
Вопрос:
У меня есть список дат, отформатированных с matplotlib.dates.date2num
помощью и список целых чисел. Я пытаюсь построить линейный график с датой по оси x. Но matplotlib не всегда правильно отображает даты при использовании Python 3. Однако я заметил, что это не проблема при использовании Python 2.
Это мой код:
fig, ax = plt.subplots()
plt.title(constants.chart_title)
plt.xlabel('X-Axis')
plt.ylabel('Y-Axis ')
fig.autofmt_xdate()
plt.plot_date(;ist_of_formatted_dates, list_of_integers)
plt.savefig('chart.png')
И вот пример того, что выводит один и тот же скрипт, используя 2 разные версии python:
✅ Python 2.7
❌ Python 3.6
При использовании Python 3 кажется, что matplotlib отображает все нечетные дни, и проблема в том, что в марте 31 день, поэтому 03-31 и 04-01 разделены на 1 день, хотя все остальные нечетные дни разделены на 2 дня.
Есть ли какой-либо обходной путь для этого?
Комментарии:
1. Это было преднамеренное изменение в версии 3.0. Однако, как вы заметили, используемые интервалы неоптимальны, что будет исправлено в 3.1. Пожалуйста, смотрите: matplotlib.org/api/… Чтобы исправить:
locator = mdates.AutoDateLocator(interval_multiples=False, ) ax.yaxis.set_major_locator(locator)
2. @JodyKlymak Интервал фиксирован, но я не могу понять, как правильно настроить даты в формате диаграммы.
locator = mpd.AutoDateLocator(interval_multiples=False)
иax.xaxis.set_major_locator(locator)
делает так, чтобы каждая галочка на оси x указывала 2019 год. Я пыталсяformatter = mpd.AutoDateFormatter(locator)
иformatter.scaled[1/(24.*60.)] = '%D'
, но это, похоже, не имеет никакого эффекта. Я был бы признателен, если бы вы могли направить меня в правильном направлении3. Вам нужно установить форматирование оси. Смотрите Пример, на который я ссылался.
Ответ №1:
Благодаря Джоди Клим я смог решить эту проблему. Я добавил несколько строк кода перед сохранением диаграммы:
plt.xticks()
locator = mpd.AutoDateLocator(interval_multiples=False)
ax.xaxis.set_major_locator(locator)
matplotlib
изменены некоторые kwargs по умолчанию для Python 3, поэтому последние 2 строки кода просто возвращают его к старому поведению. И plt.xticks()
гарантирует, что даты отформатированы правильно.