gpt4 book ai didi

python - 使用 Seaborn FacetGrid 绘制时间序列

转载 作者:太空狗 更新时间:2023-10-29 20:20:05 27 4
gpt4 key购买 nike

我有一个带有简单整数索引和 5 列的 DataFrame (data)。这些列是 DateCountryAgeGroupGenderStat。 (更改名称以保护无辜者。)我想生成一个 FacetGrid,其中 Country 定义行,AgeGroup 定义列,并且Gender 定义色调。对于这些细节中的每一个,我想制作一个时间序列图。 IE。我应该得到一组图表,每个图表上都有 2 个时间序列(1 个男性,1 个女性)。我可以非常接近:

g = sns.FacetGrid(data, row='Country', col='AgeGroup', hue='Gender')
g.map(plt.plot, 'Stat')

然而,这只是给我 x 轴上的样本编号,而不是日期。在这种情况下是否有快速修复。

更一般地说,我理解 FacetGrid 的方法是制作网格,然后 map 为其绘制函数。如果我想推出自己的绘图功能,它需要遵循哪些约定?特别是,我如何编写自己的绘图函数(传递给 FacetGridmap)以接受来 self 的数据集的多列数据?

最佳答案

我会先回答你更笼统的问题。可以传递给 FacetGrid.map 的函数规则是:

  • 它们必须将类似数组的输入作为位置参数,第一个参数对应于 x 轴,第二个参数对应于 y 轴(不过,稍后会详细介绍第二个条件
  • 它们还必须接受两个关键字参数:colorlabel。如果你想使用一个 hue 变量,那么这些变量应该传递给底层的绘图函数,尽管你可以只捕获 **kwargs 并且如果不是,则不对它们做任何事情与您正在制作的特定情节相关。
  • 调用时,他们必须在“当前事件的”matplotlib 轴上绘制绘图。

在某些情况下,您的函数绘制的绘图看起来是正确的,但未采用 xy 位置输入。我认为这基本上就是您使用 plt.plot 的方式。在您使用 map 之后调用例如 g.set_axis_labels("Date", "Stat") 会更容易,这将正确地重命名您的坐标轴。您可能还想执行 g.set(xticklabels=dates) 以获得更有意义的刻度。

还有一个更通用的函数,FacetGrid.map_dataframe。此处的规则相似,但您传递的函数必须在名为 data 的参数中接受数据帧输入,而不是采用类似数组的位置输入,而是采用与该数据帧中的变量相对应的字符串。在每个方面的迭代中,该函数将被调用,输入数据帧被屏蔽为 rowcolhue 级别。

因此,在您的特定情况下,您需要编写一个我们可以调用的函数 plot_by_date,它应该看起来像这样:

def plot_by_date(x, y, color=None, label=None):

...

(我会对 body 更有帮助,但我实际上并不知道如何处理日期和 matplotlib)。最终结果是,当您调用此函数时,它应该绘制在当前事件的轴上。然后做

g.map(plot_by_date, "Date", "Stat")

我认为它应该有效。

关于python - 使用 Seaborn FacetGrid 绘制时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com