python-3.x - 使用多列绘制图例
问题描述
我打算使用散点图绘制一个数据框,df 使用列的散点图:Dvicetimestamp 针对另一列:ID。数据框,df 如下所示:
Index Dvicetimestamp eventName ID
0 01:11:24.210000 ABC 4
1 01:11:30.224000 CDE 6
2 02:16:30.210000 CDE 6
3 02:27:30.211000 CDE 6
2 01:30:40.212000 DEF 8
3 01:35:23.122000 CDE 6
4 02:22:22.145000 CDE 6
5 02:26:11.222000 DEF 8
... ... ...
但是,我打算有一个图例,以便每个唯一颜色都有其ID和相应的事件名称显示在图表上。在显示图表时,我怎样才能使 x 轴刻度为 1 小时间隔。但是,我收到错误:KeyError:0
这是我尝试过的代码:
nums = np.array([time2num(di) for di in df['Dvicetimestamp']])
def my_formatter(x, pos=None):
d = matplotlib.dates.num2date(x)
if len(str(d.minute)) == 1:
mn = '0{}'.format(d.minute)
else:
mn = str(d.minute)
if len(str(d.hour)) == 1:
hr = '0{}'.format(d.hour)
else:
hr = str(d.hour)
return hr+':'+mn
major_formatter=FuncFormatter(my_formatter)
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(major_formatter)
labels = set(df['ID']);
ax.scatter(nums,df['ID'],s=20,c=df['ID'], marker = 'o', cmap = cm.tab20 )
xmin = df['Dvicetimestamp'][0]-datetime.timedelta(hours=1)
xmax = df['Dvicetimestamp']
[len(df['DviceTimeStamp'])-1]+datetime.timedelta(hours=1)
ax.set_xlim((xmin,xmax))
解决方案
推荐阅读
- python - 如何显示由与 python 接口的相机捕获的实时 2D 图像
- c# - C# - 如何将信息发送到多个 [FromForm]?
- firebase - 为什么@DocumentID 用作 ID 参数时不允许更新列表行?
- laravel - Swift_TransportException(503) - 预期响应代码 354,但得到代码“503”,消息“503 5.5.1 错误的命令序列 - Laravel
- python - XMLTree 解析和打印
- python - 文件替换()方法
- python-sphinx - 尝试创建 PDF 时出现 Sphinx/PlantUML 错误
- javascript - 如何使用charts.js 设置折线图的x 轴和y 轴以及标题?
- docker - docker 无法运行 vscodium
- django - Heroku - 简单 Django 应用程序的 gunicorn 超时