import datetime
from math import sqrt, floor
import gpxpy
import matplotlib.pyplot as plt
from geopy import distance
import numpy as np
import pandas as pd
import chart_studio.plotly as py
import plotly.graph_objs as go
import haversine
GPX_FILE = open('/Users/lh/downloads/my_run_002.gpx', 'r')
GPX = gpxpy.parse(GPX_FILE)
len(GPX.tracks)
len(GPX.tracks[0].segments)
len(GPX.tracks[0].segments[0].points)
DATA = GPX.tracks[0].segments[0].points
## Start Position
START = DATA[0]
## End Position
FINISH = DATA[-1]
df = pd.DataFrame(columns=['lon', 'lat', 'alt', 'time'])
for point in DATA:
df = df.append({'lon': point.longitude, 'lat' : point.latitude,
'alt' : point.elevation, 'time' : point.time}, ignore_index=True)
plt.plot(df['lon'], df['lat'])
plt.plot(df['time'], df['alt'])
我成功获得了生成图的代码:
plt.plot(df['lon'], df['lat'])
但是当我尝试绘制时:
plt.plot(df['time'], df['alt'])
我收到此错误:
plt.plot(df['time'], df['alt'])
追溯(最近一次通话):
文件“”,第1行,在 plt.plot(df ['time'],df ['alt'])
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py”,第2789行,在图中 不是其他{}),** kwargs)
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py”,第1666行,在图中 行= [* self._get_lines(* args,data = data,** kwargs)]
在“ 调用”中的文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py”第225行 来自self._plot_args(this,kwargs)的收益
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py”,行391,在_plot_args中 x,y = self._xy_from_xy(x,y)
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_base.py”,第243行,_xy_from_xy bx = self.axes.xaxis.update_units(x)
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py”,行1496,在update_units中 self.set_units(默认)
文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/matplotlib/axis.py”,行1570,在set_units中 如果u!= self.units:
eq 中的文件“ /Users/lh/anaconda3/lib/python3.7/site-packages/gpxpy/gpxfield.py”,第71行 返回self.offset == other.offset
AttributeError:'NoneType'对象没有属性'offset'
df
揭示
<table>
<tr><td></td><td>lon</td><td>lat</td><td>alt</td><td>time</td></tr><tr>
<td>0</td><td> 100.491491</td><td> 13.725929 </td><td> 9.8 </td><td> 2019-06-11 07:32:31+00:00</td></tr><tr>
<td>1</td><td> 100.491541 </td><td> 13.725939 </td><td> 10.5 </td><td> 2019-06-11 07:32:33+00:00</td></tr><tr>
<td>2</td><td> 100.491575 </td><td> 13.725943 </td><td> 10.7 </td><td> 2019-06-11 07:32:35+00:00</td></tr><tr>
<td>3</td><td> 100.491629 </td><td> 13.725970</td><td> 10.8 </td><td> 2019-06-11 07:32:37+00:00</td></tr><tr>
<td>4</td><td> 100.491667 </td><td>13.725987 </td><td> 11.1 </td><td>2019-06-11 07:32:38+00:00</td></tr><tr>
<td>5</td><td> 100.491693 </td><td> 13.726010</td><td> 11.0 </td><td> 2019-06-11 07:32:39+00:00</td></tr><tr>
<td>6</td><td> 100.491723 </td><td> 13.726035 </td><td> 10.9 </td><td> 2019-06-11 07:32:40+00:00</td></tr><tr>
<td>7</td><td> 100.491756 </td><td> 13.726069 </td><td> 10.8 </td><td> 2019-06-11 07:32:41+00:00</td></tr><tr>
<td>8</td><td> 100.491801 </td><td> 13.726124 </td><td> 10.6 </td><td> 2019-06-11 07:32:42+00:00</td></tr><tr>
<td>9</td><td> 100.491866 </td><td> 13.726193 </td><td> 10.6 </td><td> 2019-06-11 07:32:43+00:00</td></tr><tr>
<td>10</td><td> 100.491917 </td><td> 13.726236 </td><td> 11.0 </td><td> 2019-06-11 07:32:44+00:00</td></tr>
</table>
我认为时间格式可能不正确,所以我尝试了
df['time'] = pd.to_datetime(df['time'])
df.dtypes
出[2]:
lon float64
lat float64
alt float64
时间datetime64 [ns,SimpleTZ(“ Z”)]
dtype:对象
但这没什么不同,我仍然会收到AttributeError:'NoneType'对象没有属性'offset'
主要问题:如何解决此错误?
第二个问题:append方法似乎很慢,并不是填充pd的最有效方法。如果是这样,我该怎么做呢?