seaborn FacetGrid + map_dataframe завершается неудачно (но не при использовании карты) - PullRequest
0 голосов
/ 11 декабря 2018

В визуализации 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 голосов
/ 11 декабря 2018

Я не думаю, что нужно пытаться вычислить histogram строк.

В любом случае, ваш столбец "x", который здесь не используется, содержит nan с.Так как он здесь не используется, вы можете просто пропустить его,

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

, или вы можете указать, чтобы он не пропускал nan s,

g = sns.FacetGrid(prua, ...,  dropna=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...