8on*_*ne6 9 python matplotlib pandas seaborn
我有一个DataFrame(data),它有一个简单的整数索引和5列.柱子是Date,Country,AgeGroup,Gender,Stat.(名称变更为保护无辜).我想以产生FacetGrid其中Country定义的行,AgeGroup定义列,并Gender限定了色调.对于每个细节,我想制作一个时间序列图.即我应该得到一组图表,每个图表上有2个时间序列(1个男性,1个女性).我可以非常接近:
g = sns.FacetGrid(data, row='Country', col='AgeGroup', hue='Gender')
g.map(plt.plot, 'Stat')
Run Code Online (Sandbox Code Playgroud)
然而,这只是给出了x轴上的样本编号而不是日期.在这种情况下是否有快速解决方案.
更一般地说,我理解的方法FacetGrid是制作网格,然后map绘制绘图功能.如果我想推出自己的绘图功能,它需要遵循哪些约定?特别是,如何编写自己的绘图函数(传递给mapfor FacetGrid),从我的数据集中接受多列数据?
mwa*_*kom 10
我先回答你一般的问题.您可以传递给的函数规则FacetGrid.map是:
color和label.如果你想使用一个hue变量,那么这些变量应该传递给底层的绘图函数,尽管**kwargs如果它与你正在制作的特定绘图无关,你可以抓住它们而不对它们做任何事情.有可能是在您的函数绘制的曲线,看起来不正确服用的情况下x,y,位置输入.我认为这基本上与你使用的方式有关plt.plot.例如,g.set_axis_labels("Date", "Stat")在您使用之后,可以更容易地调用map,这将正确地重命名您的轴.您可能还希望g.set(xticklabels=dates)获得更有意义的刻度.
还有一个更通用的功能,FacetGrid.map_dataframe.这里的规则是相似的,但是你传递的函数必须在一个被调用的参数中接受一个数据帧输入data,而不是采用类似数组的位置输入,它需要与该数据帧中的变量相对应的字符串.通过刻面每一次迭代,该功能将被屏蔽,只是将值的该组合的输入数据帧调用row,col和hue水平.
所以在你的特定情况下,你需要编写一个我们可以调用的函数,plot_by_date它应该是这样的:
def plot_by_date(x, y, color=None, label=None):
...
Run Code Online (Sandbox Code Playgroud)
(我对身体更有帮助,但我实际上并不知道如何使用日期和matplotlib做多少).最终结果是,当您调用此函数时,它应绘制在当前活动的Axes上.然后做
g.map(plot_by_date, "Date", "Stat")
Run Code Online (Sandbox Code Playgroud)
我认为它应该有效.