Как построить частотные полигоны в Python?
Например, я могу построить график плотности следующим образом:
import pandas as pd
x = (1.5,1.5,1.5,1.5,1.5,1.5,1.5,
2.5,2.5,2.5,
3.5,3.5,3.5,3.5,3.5,3.5,
4.5,4.5,
6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5)
df = pd.DataFrame({'x': x})
#df.head()
df.plot(kind='density')
Это дает:
Однако я хочу, чтобы многоугольник был таким:
library(ggplot2)
x = c(1.5,1.5,1.5,1.5,1.5,1.5,1.5,
2.5,2.5,2.5,
3.5,3.5,3.5,3.5,3.5,3.5,
4.5,4.5,
6.5,6.5,6.5,6.5,6.5,6.5,6.5,6.5)
df = data.frame(x=x)
# head(x)
ggplot(data=df, mapping = aes(x=x)) +
geom_freqpoly(binwidth=2)
ОБНОВЛЕНИЕ
Я попробовал решение @Quang Hoang для задачи, данной Хэдли в книге «R для науки о данных», и получил аналогичный результат.
Book:
Я сохранил данные nycflights13, полученные из R, и поместил их в github.
Вот моя попытка получитьтот же участок:
import numpy as np
import pandas as pd
import seaborn as sns
flights = pd.read_csv('https://github.com/bhishanpdl/Datasets/blob/master/nycflights13.csv?raw=true')
not_cancelled = flights.dropna(subset=['dep_delay','arr_delay'])
not_cancelled.dep_delay.isnull().sum(), not_cancelled.arr_delay.isnull().sum()
delays = not_cancelled.groupby('tailnum')['arr_delay'].mean().reset_index()
x = delays.arr_delay.values
m = int(x.max())
counts, bins = np.histogram(x, bins=range(-80,m,10))
plt.plot(bins[:-1]+1, counts)