2017-07-24 57 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

相關問題