在seaborn刻面散点图中格式化日期时间

时间:2014-10-03 00:29:45

标签: python date datetime matplotlib

我正在学习python pandas + matplotlib + seaborn绘图和数据可视化来自" R Lattice"透视。我还在伸腿。这是一个我无法正常工作的基本问题。这是一个例子:

# envir (this is running in an iPython notebook)
%pylab inline

# imports
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# generate some data
nRows = 500
df = pd.DataFrame({'c1' : np.random.choice(['A','B','C','D'], size=nRows),
               'c2' : np.random.choice(['P','Q','R'], size=nRows),
               'i1' : np.random.randint(20,50, nRows),
               'i2' : np.random.randint(0,10, nRows),
               'x1' : 3 * np.random.randn(nRows) + 90,
               'x2' : 2 * np.random.randn(nRows) + 89,
               't1' : pd.date_range('10/3/2014', periods=nRows)})

# plot a lattice like plot 
# 'hue=' is like 'groups=' in R
# 'col=' is like "|" in lattice formula interface

g = sns.FacetGrid(df, col='c1', hue='c2', size=4, col_wrap=2, aspect=2)
g.map(scatter, 't1', 'x1', s=20)
g.add_legend()

enter image description here

我希望x轴以适当的日期时间格式绘制,而不是整数。我可以指定格式(例如YYYY-MM-DD)作为开头。

然而,如果检查时间范围并产生适当的比例,那会更好。在R Lattice(和其他绘图系统)中,如果x变量是一个日期时间,那么"漂亮"函数将确定范围是否大并且仅暗示YYYY(例如,用于绘制20年时间趋势),YYYY-MM(用于绘制几年的事物)...或YYYY-MM-DD HH:MM:SS高频时间序列数据的格式(即每100 mS采样一次)。这是自动完成的。这种情况有什么可用的吗?

关于这个例子的另一个非常基本的问题(我几乎不好意思问)。我怎样才能在这个情节上获得一个头衔?

谢谢!
兰德尔

1 个答案:

答案 0 :(得分:1)

它看起来像seaborn does not support datetime on the axes in lmplot。但是,它确实支持其他一些情节。与此同时,我建议在上面的链接中添加您对该问题的需求,因为目前似乎没有足够的感知需要他们解决它。

就标题而言,使用可以在对象本身上使用set_title()。这看起来像这样:

.
.
.
g = sns.FacetGrid(df, col='c1', hue='c2', size=4, col_wrap=2, aspect=2)
g.map(scatter, 't1', 'x1', s=20)
g.add_legend()

然后简单地添加:

g.set_title('Check out that beautiful facet plot!')