Составление графика времени в matplotlib для получения множества цветов - PullRequest
1 голос
/ 24 апреля 2020

Я новичок в python, пытаюсь построить данные даты и времени в matlibplot, но получаю странный результат - я могу рисовать только точки, и они имеют множество разных цветов. Я использую plot_date().

Я попытался создать работоспособный пример, но проблема там не появилась (см. Ниже). Итак, вот пример базы данных, которая дает проблемы.

import pandas as pd
import matplotlib.dates as mdates
import matplotlib.pyplot as plt

#get a sense of what the data looks like:
data.head()

out:
                         date     variable      value unit
0  2020-04-17 10:30:02.309433  Temperature  20.799999    C
2  2020-04-17 10:45:12.089008  Temperature  20.799999    C
4  2020-04-17 11:00:07.033692  Temperature  20.799999    C
6  2020-04-17 11:15:04.457991  Temperature  20.799999    C
8  2020-04-17 11:30:04.996910  Temperature  20.799999    C

data.info()

<class 'pandas.core.frame.DataFrame'>
Int64Index: 99 entries, 0 to 196
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   date      99 non-null     object 
 1   variable  99 non-null     object 
 2   value     98 non-null     float64
 3   unit      99 non-null     object 
dtypes: float64(1), object(3)
memory usage: 3.9+ KB

#convert date variable to datetime 
data['date'] = pd.to_datetime(data['date'])

#plot with plot_date, calling date2num on date variable
plt.plot_date([mdates.date2num(data['date'])], [data['value']])

Дает: enter image description here

Почему я получаю все эти цветные очки? Когда я строю небольшой набор данных из трех периодов времени, я не вижу такого поведения. Вместо этого я получаю три синие точки:

#create dataframe
df = pd.DataFrame({'time': ['2020-04-17 10:30:02.309433', '2020-04-17 10:30:02.309455', '2020-04-17 10:45:12.089008'], 
    'value': [20.799999, 41.099998, 47.599998]})

#change time variable to datetime object
df['time'] = pd.to_datetime(df['time'])

#plot
plt.plot_date(mdates.date2num(df['time']), df['value'])

Дает три синие точки, как и ожидалось:

enter image description here

Наконец, как я могу произвести линейный график с использованием plot_date(). Единственный способ сделать это - использовать: datetime.datime.now() форматы даты и вызов pyplot.plot() - см. Второй ответ здесь: Время печати в Python с Matplotlib

1 Ответ

1 голос
/ 24 апреля 2020

Разница между plt.plot_date([mdates.date2num(data['date'])], [data['value']]) и plt.plot_date(mdates.date2num(df['time']), df['value']) заключается в том, что у вас есть дополнительный набор квадратных скобок.

Что касается строки, добавьте параметр fmt='-' к plot_date

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...