我有一个数据列表:
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中是否有任何解决方案使用第三列(时间戳或日期时间对象)绘制按日期颜色编码的两列数据?
答案 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
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')
使用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)