Линейный график распределения Seaborn показывает звон - PullRequest
1 голос
/ 10 марта 2020

В моем графике Seaborn с кодом

import seaborn as sns
df['hour'] = df['time']/3600
plt.figure(figsize=(30,10))               
plt.gcf().subplots_adjust(left = 0.3)
g = sns.distplot(df['hour'], axlabel = 'No. Of Hours', label = 'Frequency')

линейный график, который идет с графиком распределения, выглядит очень странно, так как он представляет всплеск для каждого бара и показывает тенденцию к увеличению в правом хвосте распределения график, где было мало данных. Является ли этот график правильным? Если нет, то что в этом плохого и как я могу это исправить? Вот график: enter image description here

1 Ответ

1 голос
/ 10 марта 2020

Об этой проблеме сообщают в http://github.com/mwaskom/seaborn/issues/1590

Это связано с алгоритмом KDE, используемым пакетом statsmodels. Вы можете заставить seaborn использовать алгоритм scipy вместо этого, добавив следующую строку:

sns.distributions._has_statsmodels = False

Вот короткий фрагмент, который воспроизводит проблему:

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
    'hour': [1] + 100 * [2] + [10]
})
plt.figure(figsize=(30,10))               
plt.gcf().subplots_adjust(left = 0.3)
g = sns.distplot(df['hour'], axlabel = 'No. Of Hours', label = 'Frequency')

enter image description here

И вот результат, если вы заставите его не использовать statsmodels:

sns.distributions._has_statsmodels = False
plt.figure(figsize=(30,10))               
plt.gcf().subplots_adjust(left = 0.3)
g = sns.distplot(df['hour'], axlabel = 'No. Of Hours', label = 'Frequency')

enter image description here

...