【问题标题】:Datetime plotting日期时间绘图
【发布时间】:2021-05-28 03:31:45
【问题描述】:

这里是 Python 初学者:/! 可以在此处找到 csv 文件 (https://www.waterdatafortexas.org/groundwater/well/8739308)

#我正在尝试对我的数据进行子集化并按年或每 6 个月绘制一次,但我无法让它工作,这是我目前的代码

data=pd.read_csv('Water well.csv')

data["datetime"]=pd.to_datetime(data["datetime"])
data["datetime"]
fig, ax = plt.subplots()
ax.plot(data["datetime"], data["water_level(ft below land surface)"])
ax.set_xticklabels(data["datetime"], rotation= 90)

这是我的数据和输出。如您所见,它仅按时间绘制 2021 年

这是我2016年到2021年的水位数据和代码输出

数据

【问题讨论】:

标签: python pandas datetime matplotlib


【解决方案1】:

当您运行脚本时,您会收到以下警告:

UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_xticklabels(data["datetime"], rotation= 90)

您的示例演示了为什么它们包含此警告。
注释掉你的行

#ax.set_xticklabels(data["datetime"], rotation= 90)

你有以下(正确的)输出:

您的代码现在采用九个自动生成的 x 轴刻度,删除正确的标签,并用数据框的前九个条目标记它们。显然,这些标签是错误的,这就是它们向您提供警告的原因 - 让 matplotlib 进行自动标记,或者同时使用 FixedFormatter 和 FixedLocator 来确保刻度位置和标签匹配。
有关Tick locators and formatters consult the matplotlib documentation的更多信息。

P.S.:您还必须反转 y 轴,因为数据在地表以下以英尺为单位。

【讨论】:

  • 非常感谢@Mr。 T!呃,我觉得自己太愚蠢了 lmaooo
  • 最后一件事,反转 y 轴是什么意思,是的,我明白数据在地表以下英尺
  • 如果这个答案解决了你的问题,请考虑accepting it.
  • 关于您的问题 - 提供这些数据的网站以倒置的 y 轴呈现数据,因此增加和减少与我们对上升和下降水平的理解相对应。您可以使用ax.invert_yaxis() 在您的情节中实现这一点。不要担心犯错 - 我们都在这里互相学习。
  • 哦,喜欢翻转它!对不起!
【解决方案2】:

问题是,你有太多的数据,你必须简化它。

首先你可以尝试做这样的事情:

data["datetime"]=pd.to_datetime(data["datetime"])
date = data["datetime"][0::1000][0:10]
temp = data["water_level(ft below land surface)"][0::1000][0:10]
fig, ax = plt.subplots()
ax.plot(date, temp)
ax.set_xticklabels(date, rotation= 90)

日期 = 数据[“日期时间”][0::1000][0:10]

这一行的意思是:取索引 0,然后是 1000,然后是 2000,...

所以你会有一个新的数组。然后使用这个新数组,您只需获取前 10 个索引。

这是一个肮脏的解决方案

我认为最好的解决方案是创建一个包含每天或每周平均温度的新数据集。在你显示结果之后

【讨论】:

  • 我认为刻度标签的顺序不正确。
猜你喜欢
  • 2020-12-29
  • 2015-12-23
  • 1970-01-01
  • 2011-01-13
  • 2011-03-03
  • 2021-03-20
  • 1970-01-01
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多