首页 > 解决方案 > 在 matplotlib 中绘制日期时间,产生多种颜色

问题描述

我是 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']])

给出: 在此处输入图像描述

为什么我得到所有这些有色点?当我构建一个包含三个时间段的小型数据集时,我看不到这种行为。相反,我得到三个蓝点:

#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'])

如预期的那样给出三个蓝点:

在此处输入图像描述

最后,如何使用plot_date(). 我看到的唯一方法是使用:datetime.datime.now()日期格式和调用pyplot.plot()- 请参阅此处的第二个答案:Plotting time in Python with Matplotlib

标签: python-3.xpandasmatplotlib

解决方案


plt.plot_date([mdates.date2num(data['date'])], [data['value']])和之间的区别在于plt.plot_date(mdates.date2num(df['time']), df['value'])您有一组额外的方括号。

至于线,添加fmt='-'选项plot_date


推荐阅读