Линейный график с равноудаленными значениями оси x python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть набор данных, состоящий из времени и значений.

Blockquote

Используя этот код, я получаю:

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
value=[3,8,12,54,23,12,5]
plt.plot(time,value)
plt.show()

enter image description here

Как видите, между 10:15 и 15:15 огромная пропасть.Я хочу иметь ось X, которая также отражает разницу во времени между одной записью и другой.Другими словами, мне нужно, чтобы промежуток между 10:15 и 15:15 был больше, чем между 07:45 и 8:15.Есть ли способ сделать это?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Видимо другой ответчик не увидел мой комментарий.Что я имел в виду под «на самом деле отображать значения времени», так это преобразовывать время в datetime объекты.Затем их построение приводит к эквидистантным меткам по умолчанию.При желании их можно украсить, указав формат H: M.

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
truetime = [datetime.strptime(t, "%H:%M") for t in time]
value=[3,8,12,54,23,12,5]

plt.plot(truetime,value)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
plt.show()

enter image description here

0 голосов
/ 19 декабря 2018

Первым шагом является преобразование строк в числовые значения для времен:

time=['07:45','8:15','8:45','9:35','10:15','15:05','16:05']
d=[]
for i in time:
    c=i.split(':')
    d.append((float(c[0])-7)*60+float(c[1]))

print d

Мы связывали с каждым разом количество минут, отделяющих его от 7 часов.Затем мы можем построить график:

value=[3,8,12,54,23,12,5] 
import matplotlib.pyplot as plt
plt.plot(d,value)

, а также изменить галочки:

value=[3,8,12,54,23,12,5] 
import matplotlib.pyplot as plt
plt.plot(d,value)
plt.xticks(d,time)
plt.show()

Если вы хотите использовать разные x-галочки, вы просто вручную записываете их в список,например:

time2=['8:00','10:00','12:00','14:00','16:00']

, затем вы конвертируете список, как мы это делали ранее:

d2=[]
for i in time2:
    c=i.split(':')
    d2.append((float(c[0])-7)*60+float(c[1]))

print d2

, и соответственно меняете галочки:

plt.xticks(d2,time2)
...