使用带有时间序列的Pandas DataFrame时散点图中的着色标记

时间:2018-05-11 13:43:59

标签: python pandas dataframe matplotlib

在使用包含时间序列的Pandas DataFrame时,我正在努力弄清楚如何使用Matplotlib制作散点图。我希望在x轴上使用日期/时间,并在y轴上绘制另一列的相应值。我可以让它工作,但我也想根据第三列的值为数据点着色。我在网上发现的所有例子似乎都出现了一种错误或其他错误。

可重复的例子如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

mydatetimes=pd.to_datetime(['2015-05-01 18:00:12', '2015-05-01 18:01:12', 
                            '2015-05-01 18:02:12', '2015-05-01 18:03:12',
                            '2015-05-01 18:04:12', '2015-05-01 18:05:11',
                            '2015-05-01 18:06:11', '2015-05-01 18:07:11',
                            '2015-05-01 18:08:12', '2015-05-01 18:09:12',
                            '2015-05-01 18:10:12', '2015-05-01 18:11:12'])

myvalues = np.array([45.0, 34.0, 35.0, 45.0, 23.0, 67.0, 
                    78.0, 23.0, 87.0, 32.0, 58.0, 71.0])

myothervalues = np.array([803, 743, 682, 622, 562, 502, 
                          383, 323, 263, 202, 142, 82])

mydatadf = pd.DataFrame({'mydates': mydatetimes, 'data1': myvalues, 'data2': myothervalues})

plt.plot(mydatadf.mydates, mydatadf.data1, '.', c=cm.viridis(mydatadf.data2))
plt.show()

有没有人知道这样做的简单方法?

1 个答案:

答案 0 :(得分:1)

如果您希望每个点都有自己的颜色,那么您应该使用plt.scatter而不是plt.plot。同时绘制值。您只需要将您的情节线更改为:

# Set the plot limit
marg = pd.Timedelta(1, 'm')
_ = plt.xlim(mydatadf.mydates.min()-marg, mydatadf.mydates.max()+marg)

plt.scatter(mydatadf.mydates.values, mydatadf.data1.values,
            c=mydatadf.data2.values)
plt.show()

enter image description here