seaborn FacetGrid + map_dataframe失败(但使用地图时不会失败)

时间:2018-12-10 23:34:00

标签: python seaborn

季节性可视化中,map_dataframe无法正确切片数据帧,但是map可以正常工作。

附带了一个失败的玩具示例。您可以通过以下方式轻松加载

prua = pd.read_csv("prua_so.csv")

文件:prua_so.csv

一些进口:

import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
sns.set_style("dark")

以下工作正常:

g = sns.FacetGrid(prua, row="year", col = None,
                  aspect = 3, 
                  gridspec_kws={"hspace":0.6})

g.map(plt.hist, "s")

但是,在下面使用map_dataframe的情况下,列s的计数是错误的。

g = sns.FacetGrid(prua, row="year", col = None,
                  aspect = 3, 
                  gridspec_kws={"hspace":0.6})

def grid_function_perc_2(**kwargs):
    data = kwargs.pop('data')
    print(data.shape[0])   
    plt.hist(data["s"])

g.map_dataframe(grid_function_perc_2)

这是计数的打印输出,我跳过了难看的图形:

  

12494 13047 11620 8141 1895

最后,我想出了一种解决方法,没有什么值得骄傲的,但这至少是保持其正常工作的一种方法,

def hist_custom(x, **kwargs):
    print(x.shape[0])
    #print(x.head())
    #print(x.index)
    grid_function_perc_2(data=prua.loc[x.index])

g = sns.FacetGrid(prua, row="year", col = None,
                  aspect = 3, 
                  gridspec_kws={"hspace":0.6})

g.map(hist_custom, 
      "s")

打印输出:

  

21805 21805 27007 27007 28977 28977 29667 29667 28396 28396

一个非常奇怪的问题,渴望知道一个更好的解决方案,因为我确实需要在plot函数中使用数据框(它比直方图要复杂得多)。

1 个答案:

答案 0 :(得分:1)

我认为不应尝试计算histogram的字符串。

无论如何,您的"x"列(此处未使用)包含nan个。由于此处未使用它,您可以将其忽略,

prua = prua[["s", "year"]]

或者,您可以指定不丢弃nan

g = sns.FacetGrid(prua, ...,  dropna=False)