2017-07-24 60 views
2

我试图用seaborn绘制图表如何使用seaborn将int绘制到x轴上的日期时间?

sns.lmplot(x="when_start", y="how_long",hue= 'state', 
      data=apps_pd.loc[(apps_pd['user'] == 'xavi')],lowess=True); 

apps_pd是一个数据帧。和在apps_pd的Fileds [ 'when_start']是INT像1499963856220,和同为how_long

结果脚本

。但是,我有一个非常混乱的图形,如果我不改变数据的格式。

无论如何,我可以将x轴的单位更改为'yyyy-mm-dd'?我想将所有数据分组在一天中。

也可以将y轴的单位更改为小时 - 分钟?

这是我的数据框的前5行。

+0

您需要提供您的数据的详细信息。通过将变量转换为“日期时间”格式,例如,您可以很容易地解决您的问题。 http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.to_datetime.html – omdv

+0

嗨@omdv你需要哪种细节。我尝试使用日期时间。但我总是得到*** ValueError:序号必须> = 1 ***错误 – Xavier

+0

数据框的前十行应该足够了,@ Xavier。 – Bonifacio2

回答

1

首先当你发布数据发布它的文本格式不是图像。

可以山坳when_start转换为日期时间格式如下:

apps_pd['when_start'] = pd.to_datetime(apps_pd['when_start'], unit='ms') 

然而散点图是lmplot does not support datetime格式的调用之一。你必须在这个例子中绘制等之后,以取代XTICK标记:

import pandas as pd 
import seaborn as sns 
import matplotlib.pylab as plt 

cols = ['how_long', 'state', 'user', 'when_start'] 
data = [[62297, 'FINISHED', 'xavi', 1499963793923], 
[25761, 'FINISHED', 'xavi', 1499963446385], 
[20082, 'FINISHED', 'xavi', 1499963221203], 
[20508, 'FINISHED', 'xavi', 1499963156760], 
[580975, 'FINISHED', 'xavi', 1499962435293]] 

apps_pd = pd.DataFrame(data, columns = cols) 
# convert ms timestamps of dataframe to date time format by pandas 
#apps_pd['when_start'] = pd.to_datetime(apps_pd['when_start'], unit='ms') 
print (apps_pd) 

sns.lmplot(x='when_start', y='how_long', hue= 'state', 
data=apps_pd[(apps_pd['user'] == 'xavi')],lowess=True) 

# get current axis 
ax = plt.gca() 
# get current xtick labels 
xticks = ax.get_xticks() 
# convert all xtick labels to selected format from ms timestamp 
ax.set_xticklabels([pd.to_datetime(tm, unit='ms').strftime('%Y-%m-%d\n %H:%M:%S') for tm in xticks], 
rotation=50) 

plt.show() 

enter image description here

+0

太棒了!非常感谢你。只是想知道我可以每天都在一起吗?在这种情况下,x轴上只有一天是2017-07-13。我可以使用类似的方法将y轴转换为小时吗? – Xavier

+0

我想你有多少天没关系,如果需要你可以跳过一些标签 – Serenity

相关问题