I tried your script on some files I downloaded from Garmin but the scripts seem to have a date parsing problem:
Traceback (most recent call last):
File "garmin-plotter.py", line 6, in <module>
for track in read_gpx_file(file_name, maxpulse=187):
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 283, in read_gpx_file
'segments': [read_segment(i, maxpulse=maxpulse) for i in segments],
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 283, in <listcomp>
'segments': [read_segment(i, maxpulse=maxpulse) for i in segments],
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 172, in read_segment
data = get_point_data(point)
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 142, in get_point_data
time = extract_data(point, 'time', date_format)
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 121, in extract_data
return [formatter(child.data) for child in i.childNodes]
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 121, in <listcomp>
return [formatter(child.data) for child in i.childNodes]
File "C:\Users\Daniel\Anaconda3\lib\site-packages\gpxplotter\gpxread.py", line 139, in date_format
timeobj = datetime.strptime(string, '%Y-%m-%dT%H:%M:%S.%f%z')
File "C:\Users\Daniel\Anaconda3\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "C:\Users\Daniel\Anaconda3\lib\_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data '2019-10-02T11:11:44.000Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
I suspect the problem is that it expects a lowercase z at the end, when the files have uppercase Z. I believe uppercase Z is also the most common (maybe only allowed) format for UTC.