Python. Matplotlib. Как объединить гистограмму и график?
У меня есть 50 замеров, которые я храню в txt файле. Мне нужна гистограмма распределения. Вот мой код:
f = open("input.txt", 'r')
a = [0] * 59
izmer = list()
for line in f:
a[int(int(line) / 10)] += 1
izmer.append(int(int(line) / 10) / 10)
gist = dict()
x = list()
y = list()
for i in range(0, 59):
if a[i] > 0:
x.append((i / 10))
y.append(a[i] / 50)
fig, ax =plt.subplots()
ax.bar(x, y, width=[0.04] * len(y))
ax.set_facecolor('seashell')
plt.xticks(np.arange(4, 6, 0.2))
plt.yticks(np.arange(0, 0.3,0.05))
plt.show()
Поверх нее я хотел бы отрисовать график, но я не понимаю как мне его отрисовывать поверх данной гистограммы. На данный момент я сделал две программы, которые показывают то, что мне нужно, но в разных окнах
Ответы (1 шт):
То, что вы хотите сотворить - построить эмпирическую функцию плотности распределения - называется процедурой восстановления плотности на основе ядерной оценки (Kernel Density Estimation, KDE). Есть два простейших инструмента ее построения.
С использованием Seaborn.
import numpy as np
import seaborn as sns
x=np.random.normal(0,1,size=200)
sns.distplot(x)
С использованием графики б-ки Pandas и Matplotlib.
import pandas as pd
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
df=pd.DataFrame(x,columns=[['A']])
df.plot.kde(ax=ax)
df.plot.hist(density=True, ax=ax)
Можете также использовать множество других, более эффективых реализаций KDE , в том числе из SciPy (scipy.stats.gaussian_kde и scipy.signal.parzen), из Statsmodels (statsmodels.api.nonparametric) - KDEUnivariate() и KDEMultivariate(), из Scikit-learn sklearn.neighbors.KernelDensity(). А потом уже по ним строить график самостоятельно.

