无法使用 Seaborn 绘图

Posted

技术标签:

【中文标题】无法使用 Seaborn 绘图【英文标题】:Unable to Plot using Seaborn 【发布时间】:2019-01-04 12:47:06 【问题描述】:

你好我的数据集如下

username    switch_state    time    
abcd         sw-off         07:53:15 +05:00 
abcd         sw-on          07:53:15 +05:00

现在使用这个我需要找到在给定的一天,一天中有多少次开关状态被操纵,即打开或关闭。我的测试代码如下

switch_off=df.loc[df['switch_state']=='sw-off']#only off switches
groupy_result=switch_off.groupby(['time','username']).count()['switch_state'].unstack#grouping the data on the base of time and username and finding the count on a given day. fair enough

这个 groupby 子句的结果为

print(groupy_result)
username  abcd
time             
05:08:35        3
07:53:15        3
07:58:40        1

现在您可以看到计数在时间列中连接在一起。我需要将它们分开,以便我可以使用 Seaborn 散点图绘制它。我需要有 x 和 y 值,在我的情况下是 x=time,y=count 请帮助我,我该如何绘制此列。

`

【问题讨论】:

【参考方案1】:

您可以尝试以下方法将数据作为DataFrame 本身获取

df = df.loc[df['switch_state']=='sw-off']
df['count'] = df.groupby(['username','time'])['username'].transform('count')

这两行代码将为您提供一个更新的数据框df,它将添加一个名为count 的列。

df = df.drop_duplicates(subset=['username', 'time'], keep='first')

上面的行将删除重复的行。然后你可以绘制df['time']df['count']

plt.scatter(df['time'], df['count'])

【讨论】:

abcd 07:53:15 3.0 abcd 07:53:15 3.0 这是输出,因为您可以看到时间没有正确分组,因为它正在重复。您不认为在 groupby 语句之后必须只有一个计数条目与时间相比,例如两行都应该在 abcd 07:53:15 3.0 上分组为单个 很好的答案,谢谢,但在绘图时它给了我一个错误,说 float() 参数必须是字符串或数字,而不是 'datetime.time' 我可以尝试将 datetime 转换为 float 但我会想问一下解决这个问题的最佳选择是什么? 谢谢!你可以试试 ply.plot_date()。我认为这也取决于其他因素来决定最佳方法。

以上是关于无法使用 Seaborn 绘图的主要内容,如果未能解决你的问题,请参考以下文章

无法在 seaborn distplot 中显示图例

使用 seaborn 绘图时,如何为色调参数指定多个变量?

seaborn中的图例重叠绘图区域[重复]

如何将 Seaborn 绘图集成到 Tkinter GUI

在 Seaborn 中绘图时 Python 代码出错

使用 seaborn 向 matplotlib 图添加次要网格线