Convertir l'index DataFrame en DatetimeIndex lors du sous-échantillonnage (http://qiita.com/TomHortons/items/9633394afb55bd777fa0#4-%E3%82%B5%E3%83%B3%E3%83%97 % E3% 83% AB% E9% 96% 93% E9% 9A% 94% E3% 81% 8C% E3% 81% BE% E3% 81% B0% E3% 82% 89% E3% 81% AA% E3 % 83% 87% E3% 83% BC% E3% 82% BF% E3% 82% 92% E3% 83% 80% E3% 82% A6% E3% 83% B3% E3% 82% B5% E3% 83 % B3% E3% 83% 97% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% 99% E3% 82% 8B), ce qui est très pratique, mais à partir de là sns.tsplot Il faut beaucoup de temps pour visualiser avec.
À titre d'exemple, créez un DataFrame.
import datetime
import pandas as pd
df = []
start_date = datetime.datetime(2015, 7, 1)
for i in range(10):
for j in [1,2]:
unit = 'Ones' if j == 1 else 'Twos'
date = start_date + datetime.timedelta(days=i)
df.append({
'Date': date,
'Value': i * j,
'Unit': unit
})
df = pd.DataFrame(df)
Une fois exécuté, un DataFrame contenant les colonnes de type Datetime suivantes sera créé.
Date Unit Value
0 2015-07-01 Ones 0
1 2015-07-01 Twos 0
2 2015-07-02 Ones 1
3 2015-07-02 Twos 2
4 2015-07-03 Ones 2
5 2015-07-03 Twos 4
6 2015-07-04 Ones 3
7 2015-07-04 Twos 6
8 2015-07-05 Ones 4
9 2015-07-05 Twos 8
10 2015-07-06 Ones 5
11 2015-07-06 Twos 10
12 2015-07-07 Ones 6
13 2015-07-07 Twos 12
14 2015-07-08 Ones 7
15 2015-07-08 Twos 14
16 2015-07-09 Ones 8
17 2015-07-09 Twos 16
18 2015-07-10 Ones 9
19 2015-07-10 Twos 18
Si vous décrivez ce DataFrame avec sns.tsplot,
import seaborn as sns
import matplotlib.pyplot as plt
sns.tsplot(df, time='Date', value='Value', unit='Unit')
La date et l'heure ne sont pas affichées normalement même si la date est spécifiée sur l'axe horizontal. Si vous utilisez DataFrame.plot (), cette zone s'affichera en douceur, mais si vous utilisez tsplot, vous voulez certainement utiliser seaborn.
Les questions autour de ce domaine ont été résumées dans StackOverflow.
Matplotlib utilise des nombres à virgule flottante pour les dates, et les pandas et les marins semblent avoir besoin de les indiquer explicitement. Par conséquent, utilisez le localisateur de date et le formateur de date.
Tout d'abord, convertissez la date pour que matplotlib.date puisse la comprendre.
import datetime
import pandas as pd
import matplotlib.dates as mdates
df = []
start_date = datetime.datetime(2015, 7, 1)
for i in range(10):
for j in [1,2]:
unit = 'Ones' if j == 1 else 'Twos'
date = start_date + datetime.timedelta(days=i)
df.append({
'Date': mdates.date2num(date),
'Value': i * j,
'Unit': unit
})
df = pd.DataFrame(df)
C'est presque le même que le premier DataFrame, mais avant de mettre la date dans Date, il est converti par matplotlib.dates.date2num ().
Vous pouvez également traiter le DataFrame existant avec la carte comme suit.
df.index = map(lambda x: mdates.date2num(x), df.index)
Après avoir converti Date, dessinez tsplot.
import seaborn as sns
import matplotlib.pyplot as plt
# build the figure
fig, ax = plt.subplots()
sns.tsplot(df, time='Date', value='Value', unit='Unit', ax=ax)
# assign locator and formatter for the xaxis ticks.
ax.xaxis.set_major_locator(mdates.AutoDateLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y.%m.%d'))
Après avoir spécifié ax dans le sous-tracé, définissez l'axe avec set_major_locator et set_major_formatter. Ici,% Y.% M.% D est modifié si nécessaire.
Une fois exécuté, cela ressemble à ceci.
La date peut être affichée sur l'axe des x. Inclinez l'angle des lettres de 45 degrés pour mieux voir les parties qui se chevauchent.
# put the labels at 45deg since they tend to be too long
fig.autofmt_xdate()
J'ai pu utiliser la date sur l'axe des x en toute sécurité. ** Il existe plusieurs façons d'incliner l'affichage de l'axe, mais sachez que la date peut avoir été déformée plusieurs fois selon la méthode. ** **
Recommended Posts