Seaborn 时间序列图

Posted

技术标签:

【中文标题】Seaborn 时间序列图【英文标题】:Seaborn timeseries plot 【发布时间】:2017-10-16 00:19:24 【问题描述】:

我已经清理了一个数据集,并达到了我的 pandas 数据框的样子:

aggregated_df = another_df.groupby(['datetime_x', 'my_category'])['my_value'].mean()
aggregated_df.head(3)

datetime_x  my_category
2011-10-01  foo         2090.91
2011-12-22  bar         2545.45
2012-01-06  foo         1944.44
Name: my_value, dtype: float64

当我尝试生成一个包含多个时间序列的图(每个都代表my_category 字段之一)时,我得到:ValueError: arrays must all be same length

sns.tsplot(
    data=aggregated_df, 
    time="datetime_x", 
    value="my_value",
    condition="my_category",
)

我认为原因是每个类别,当被视为熊猫系列数组时,可能具有与其他类别不同的​​长度。可能是因为缺少一些日期,但我不确定是不是这个原因,如果是这样的话我觉得很奇怪。

我还将 seaborn tsplot 方法的 condition= 参数设置为我认为应该是“分类变量”的位置(在我的情况下是 my_category 列),但这可能是我误解了如何使用tsplot

另外,groupby 的效果是我得到了一个带有嵌套 levels 的熊猫 MultiIndex,但我不确定这是 seaborn 所期望的格式,尽管它看起来不错,因为我正在尝试绘制由其中一列 (my_category) 标记的多个时间序列。

我做错了什么? 如何在同一个图表上绘制多个时间序列,每个时间序列都从分类列中标记?

【问题讨论】:

aggregated_df 不是DataFrame,而是Series 也许aggregated_df.reset_index() 将其转换为DataFrame 【参考方案1】:

tsplot 需要每个条件的“时间”相同,即对于每个条件,您需要在相同的时间单位对数据进行采样。

从tsplot docstring看一下这个例子中数据框的结构,这样会更清楚一点:

gammas = sns.load_dataset("gammas")
ax = sns.tsplot(time="timepoint", value="BOLD signal",
                unit="subject", condition="ROI",
                data=gammas)

恐怕tsplot 在这种情况下对您没有帮助。

这个答案可能对您有所帮助,因为 matplotlib 和 pandas 的完美结合可以获得类似 tsplot 的行为:ref

【讨论】:

什么是伽马数据集?我找不到关于这个数据集的任何描述 @VuAnh,这是一个标准数据集,您可以在以下位置找到完整描述:github.com/mwaskom/seaborn-data/blob/master/gammas.csv 感谢您的快速回复。我已经检查了这个 csv 文件。以及加载它的代码github.com/mwaskom/seaborn-data/blob/master/process/gammas.py。我的问题是数据集的描述是什么?数据点代表什么?例如,如果是泰坦尼克数据集,我可以在这里找到它的完整描述kaggle.com/c/titanic/data

以上是关于Seaborn 时间序列图的主要内容,如果未能解决你的问题,请参考以下文章

从 pandas dataFrame 调整 seaborn 图

带有日期时间对象的 Seaborn 回归图

seaborn 多变量组条形图

以日期为 X 轴的 Seaborn 条形图

删除 Seaborn 条形图图例标题

Seaborn 多个条形图