使用timestamp或datetime对象对散点图进行颜色编码?

时间:2016-09-14 10:46:30

标签: python pandas matplotlib

我有一个数据列表:

a = [[Timestamp('2015-01-01 15:00:00', tz=None), 53.0, 958.0],
     [Timestamp('2015-01-01 16:00:00', tz=None), 0.0, 900.0],
     [Timestamp('2015-01-02 11:00:00', tz=None), 543.0, 820.0], .....]

我的目标是绘制每个列表条目的第二个元素与每个列表条目的第三个元素,并按时间戳编码。

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
smap = ax.scatter(a[:,1], a[:,2]) 
plt.show()

我一改为绘图线就行了     smap = ax.scatter(a[:,1], a[:,2], c = a[:,0])

我收到错误消息:

  

'时间戳'对象没有属性' view'。

我认为我的一般问题是: Python中是否有任何解决方案使用第三列(时间戳或日期时间对象)绘制按日期颜色编码的两列数据?

1 个答案:

答案 0 :(得分:1)

a = [[pd.Timestamp('2015-01-01 15:00:00', tz=None), 53.0, 958.0], 
     [pd.Timestamp('2015-01-01 16:00:00', tz=None), 0.0, 900.0], 
     [pd.Timestamp('2015-01-02 11:00:00', tz=None), 543.0, 820.0]]

df = pd.DataFrame(a).add_prefix('Col_')
df

Image

df.dtypes

Col_0    datetime64[ns]
Col_1           float64
Col_2           float64
dtype: object

通过在字典中定义所需颜色的列表,将每种颜色映射到datetime列中的每个值。

c_dict = df['Col_0'].map(pd.Series(data=list('rgb'), index=df['Col_0'].values).to_dict())
df.plot.scatter(x='Col_1', y='Col_2', c=c_dict, alpha=0.8, title='Scatter-Plot')

Image

使用list并为要映射的每个值填充颜色是不切实际的。在这种情况下,您最好使用色彩映射进行映射。

c_dict = df['Col_0'].map(pd.Series(data=np.arange(3), index=df['Col_0'].values).to_dict())
df.plot.scatter(x='Col_1', y='Col_2', c=c_dict, title='Scatter-Plot', cmap=plt.cm.rainbow)

Image