В визуализации 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 (это намного сложнее, чем гистограмма).