在季节性可视化中,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函数中使用数据框(它比直方图要复杂得多)。
答案 0 :(得分:1)
我认为不应尝试计算histogram
的字符串。
无论如何,您的"x"
列(此处未使用)包含nan
个。由于此处未使用它,您可以将其忽略,
prua = prua[["s", "year"]]
或者,您可以指定不丢弃nan
,
g = sns.FacetGrid(prua, ..., dropna=False)