Python 日期时间标绘

Python 日期时间标绘,python,pandas,datetime,matplotlib,Python,Pandas,Datetime,Matplotlib,这里是Python初学者:/! csv文件可在此处找到() #我试图将我的数据子集,并按年份或每6个月绘制一次,但我无法使其工作,这是我迄今为止的代码 data=pd.read_csv('Water well.csv') data["datetime"]=pd.to_datetime(data["datetime"]) data["datetime"] fig, ax = plt.subplots() ax.plot(data[&qu

这里是Python初学者:/! csv文件可在此处找到()

#我试图将我的数据子集,并按年份或每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年的水位数据和代码输出

数据
问题是,数据太多,必须简化

首先,您可以尝试这样做:

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个索引

这是一个肮脏的解决方案


在我看来,最好的解决方案是创建一个新的数据集,其中包含每天或每周的平均温度。显示结果后,问题是,数据太多,必须简化

首先,您可以尝试这样做:

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个索引

这是一个肮脏的解决方案


在我看来,最好的解决方案是创建一个新的数据集,其中包含每天或每周的平均温度。在运行脚本时显示结果后,您会收到以下警告:

UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_xticklabels(data["datetime"], rotation= 90)
您的示例演示了他们为什么包含此警告。
把你的台词注释掉

#ax.set_xticklabels(data["datetime"], rotation= 90)
并且您有以下(正确)输出:

现在,您的代码将获取自动生成的九个x轴标记,删除正确的标签,并使用dataframe的前九个条目来标记它们。显然,这些标签是错误的,这就是它们向您提供警告的原因-要么让matplotlib进行自动标记,要么使用FixedFormatter和FixedLocator同时进行,以确保勾选位置和标签匹配。
有关的详细信息


注意:您还必须反转y轴,因为数据以英尺为单位显示在地表以下。

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

UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_xticklabels(data["datetime"], rotation= 90)
您的示例演示了他们为什么包含此警告。
把你的台词注释掉

#ax.set_xticklabels(data["datetime"], rotation= 90)
并且您有以下(正确)输出:

现在,您的代码将获取自动生成的九个x轴标记,删除正确的标签,并使用dataframe的前九个条目来标记它们。显然,这些标签是错误的,这就是它们向您提供警告的原因-要么让matplotlib进行自动标记,要么使用FixedFormatter和FixedLocator同时进行,以确保勾选位置和标签匹配。
有关的详细信息



注意:您还必须反转y轴,因为数据位于地面以下英尺处。

您确定数据加载正确吗?尝试打印(date[“datetime”])您是否有错误代码或其他信息?如果无法实际访问您的数据,我想说的第一件事是尝试对您的datetime数据进行排序,并确保没有奇怪的事情发生。@EricD.Brown嘿!我已包含csv文件@Fedour的链接。加载数据时没有错误。相关:,。您确定数据加载正确吗?尝试打印(date[“datetime”])您是否有错误代码或其他信息?如果无法实际访问您的数据,我想说的第一件事是尝试对您的datetime数据进行排序,并确保没有奇怪的事情发生。@EricD.Brown嘿!我已经包含了csv文件@Fedour的链接。加载数据时没有错误。相关:,。我认为记号标签的顺序不正确。我认为记号标签的顺序不正确。非常感谢@T先生!UGH我感觉很笨LooooOne最后一件事,你是什么意思反转y轴,是的,我知道数据是在陆地表面下的FT,如果这个答案解决了你的问题,请考虑你的问题-提供这些数据的网站呈现了一个倒Y轴的数据,因此,上升和下降符合我们对上升和下降水平的理解。您可以使用
ax.invert\u yaxis()
在绘图中实现这一点。不要担心犯错误——我们都是来互相学习的。哦,喜欢这样!很抱歉非常感谢你,T先生!UGH我感觉很笨LooooOne最后一件事,你是什么意思反转y轴,是的,我知道数据是在陆地表面下的FT,如果这个答案解决了你的问题,请考虑你的问题-提供这些数据的网站呈现了一个倒Y轴的数据,因此,上升和下降符合我们对上升和下降水平的理解。您可以使用
ax.invert\u yaxis()
在绘图中实现这一点。不要担心犯错误——我们都是来互相学习的。哦,喜欢这样!很抱歉