【问题标题】:How do I make xticks equidistant, despite their value?我如何使 xticks 等距,尽管它们很有价值?
【发布时间】:2019-09-16 22:19:56
【问题描述】:

我正在尝试绘制随时间推移在样本中测量的污染物的图表,并且一些样本日期更接近。如何用当前日期时间值绘制这条线,但使每个 xtick 等距?

这是我到目前为止所得到的,目前当样本靠得更近时,蜱会聚在一起。

date = df_TCE.SAMPLEDATE.unique()

date_IA14 = df_TCE.SAMPLEDATE[df_TCE.SYS_LOC_CODE == 'IA-14']

IA14 = df_TCE.AL_RESULT_VALUE[df_TCE.SYS_LOC_CODE == 'IA-14']

plt.plot(date_IA14, IA14)

plt.title('TCE Time Series')
plt.xlabel('Date')
plt.ylabel('Contaminant Level')
ax = plt.subplot()
ax.set_xticks(date_IA14)
ax.set_yticks([1, 2, 3, 4, 5, 6, 7])
ax.set_facecolor('seashell')

plt.show()

这是带有刻度的输出:

Output

【问题讨论】:

  • 一般来说,您不希望在不相等的刻度/数据之间有相等的间距。这很容易导致错误的结论。取而代之的是,通常会按原样绘制数据,但用等距的刻度线在图表上打勾,这些刻度线不一定与显示的数据点相对应,但可以得出正确的结论(如“每月变化”、“峰值星期一”等...)

标签: python pandas matplotlib


【解决方案1】:

您可以尝试一些事情。

首先,通过运行pandas.to_datetime(df_TCE.SAMPLEDATE) 确保名为SAMPLEDATE 的数据框系列是日期时间对象。解决出现的任何解析错误,以便您真正处理的是日期时间 x 轴而不是字符串。

然后,查看fig.autofmt_xdate() 而不是ax.set_xticks(date_IA14)。一旦我们的 x 轴被适当的日期时间对象填充,matplotlib 就足够聪明,可以让我们获得合理的 xtick 间距。

如果您不喜欢默认设置,请查看matplotlib.dates.DayLocator() 或 HourLocator() 或 MonthLocator(),只要满足您的常规间隔需求即可。您可以将其应用于您的轴对象,如下所示: ax.xaxis.set_major_locator(matplotlib.dates.DayLocator())

https://matplotlib.org/3.1.1/api/dates_api.html#matplotlib.dates.DayLocator

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2022-07-20
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多