Anonymous
Почему Matplotlib DatetimeIndex отображает несовпадающие даты?
Сообщение
Anonymous » 27 дек 2025, 03:27
Почему matplotlib иногда округляет до ближайшего месяца, а не в другое время, в зависимости от того, в каком порядке отображаются строки и какие даты используются. ax3 и ax4 особенно интересны, поскольку они не находятся на границе нового месяца. Как я могу заставить поведение ax2 не зависеть от порядка построения графиков?
Код: Выделить всё
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
gs = gridspec.GridSpec(4, 1, height_ratios=[1, 1, 1, 1])
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])
ax3 = fig.add_subplot(gs[2])
ax4 = fig.add_subplot(gs[3])
ax1.set_title("Month ends first")
pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-31", "2026-01-31"])).plot(ax=ax1, c="b")
pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax1, c="r")
ax2.set_title("Middle of month first")
pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax2, c="r")
pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-31", "2026-01-31"])).plot(ax=ax2, c="b")
ax3.set_title("Not end of month first")
pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-28", "2025-12-31", "2026-01-31"])).plot(ax=ax3, c="b")
pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax3, c="r")
ax4.set_title("Not end of month first fence post")
pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-27", "2025-12-31", "2026-01-31"])).plot(ax=ax4, c="b")
pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax4, c="r")
plt.show()
Подробнее здесь:
https://stackoverflow.com/questions/798 ... lign-dates
1766795268
Anonymous
Почему matplotlib иногда округляет до ближайшего месяца, а не в другое время, в зависимости от того, в каком порядке отображаются строки и какие даты используются. ax3 и ax4 особенно интересны, поскольку они не находятся на границе нового месяца. Как я могу заставить поведение ax2 не зависеть от порядка построения графиков? [code]import pandas as pd import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec fig = plt.figure() gs = gridspec.GridSpec(4, 1, height_ratios=[1, 1, 1, 1]) ax1 = fig.add_subplot(gs[0]) ax2 = fig.add_subplot(gs[1]) ax3 = fig.add_subplot(gs[2]) ax4 = fig.add_subplot(gs[3]) ax1.set_title("Month ends first") pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-31", "2026-01-31"])).plot(ax=ax1, c="b") pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax1, c="r") ax2.set_title("Middle of month first") pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax2, c="r") pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-31", "2026-01-31"])).plot(ax=ax2, c="b") ax3.set_title("Not end of month first") pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-28", "2025-12-31", "2026-01-31"])).plot(ax=ax3, c="b") pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax3, c="r") ax4.set_title("Not end of month first fence post") pd.Series([0, 2, 0], pd.DatetimeIndex(["2025-11-27", "2025-12-31", "2026-01-31"])).plot(ax=ax4, c="b") pd.Series([0, 1, 0], pd.DatetimeIndex(["2025-11-30", "2025-12-15", "2026-01-31"])).plot(ax=ax4, c="r") plt.show() [/code] [img]https://i.sstatic.net/1K0S27a3.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79855548/why-does-matplotlib-datetimeindex-plot-misalign-dates[/url]