matplotlib在图形上绘制奇怪的水平线

2024-05-13 23:30:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我用openpyxl将Excel电子表格中的数据读入pandas数据框,称为“tides”。该数据集包含超过32000行数据(英国每15分钟测量一次潮汐时间)。其中一列包含日期和时间信息(变量名为“datetime”),另一列包含潮汐高度(称为“tide”):

我想沿着x轴绘制日期时间,在y轴上绘制潮汐:

import numpy        as np
import matplotlib       as mpl
import matplotlib.pyplot    as plt
import pandas       as pd
import openpyxl
import datetime     as dt
from matplotlib.dates import date2num

<-- Data imported from Excel spreadsheet into DataFrame using openpyxl. -->
<-- Code omitted for ease of reading.                                   -->

# Convert datatime variable to datetime64 format:
tides['datetime'] = pd.to_datetime(tides['datetime'])

# Plot figure of 'datetime' vs 'tide':
fig = plt.figure()
ax_tides = fig.add_subplot(1,1,1)
ax_tides.plot_date(date2num(phj_tides['datetime']),phj_tides['tide'],'-',xdate=True,label='Tides 2011',linewidth=0.5)

min_datetime = dt.datetime.strptime('01/01/2011 00:00:00',"%d/%m/%Y %H:%M:%S")
max_datetime = dt.datetime.strptime('03/01/2011 23:59:45',"%d/%m/%Y %H:%M:%S")
ax_tides.set_xlim( [min_datetime, max_datetime] )

plt.show()

enter image description here

图中只显示了最初几天的数据。然而,从一天到另一天的变化,奇怪的事情发生了;在第一天的最后一个点之后,这条线消失在右边,然后返回到第二天的第一个点上,但是数据在y轴上的绘制不正确。这在整个数据集中都会发生。打印输出显示数据似乎正常。在

^{pr2}$

我不知道该怎么解释。有人能解释一下发生了什么,为什么会发生,我该如何纠正?在

提前谢谢。在

菲尔


Tags: 数据importdatetimematplotlibas时间dt绘制
2条回答

哦!终于找到了答案。最初的工作流程相当复杂。我将数据存储在Excel电子表格中,并使用openpyxl从命名单元格区域读取数据。然后将其转换为pandas数据帧。日期和时间变量已使用pandas'.to\u datetime()函数转换为datetime格式。最后用matplotlib绘制数据。当我准备好要发布到这个论坛的数据(如rauparaha所建议的),并将脚本缩减到基本要素时,我注意到第1天的数据是在2011年1月1日绘制的,而第2天的数据是在2011年2月1日绘制的。如果你看看原始帖子的输出,日期是混合格式的:给出的最后一个日期是“2011-12-31”(即年-月-日),但代表2011年1月2日的第二个日期是“2011-02-01”(即年-日-月)。在

所以,看起来我误解了pandas.to\u datetime()函数如何解释日期时间信息。我故意没有设置infer_datetime_format属性(默认值=False),并且假设任何问题都会被标记出来。但熊猫似乎认为日期是以月为先的形式。除非它们不是,在这种情况下,它会更改为“第一天”格式。我应该捡起来的!在

通过提供一个显式定义日期时间格式的字符串,我已经纠正了这个问题。一切又好起来了。在

再次感谢你的建议。并为任何混淆道歉。在

干杯。在

我无法复制您的错误,但也许我的工作伪代码可以帮助诊断问题。我生成了虚拟数据并用以下代码绘制:

^{1}$

我的数据是这样的

^{pr2}$

并生成以下绘图

enter image description here

相关问题 更多 >