Как построить картинку следующим образом.
![enter image description here](https://i.stack.imgur.com/VPPEl.png)
Я попытался сделать это, и мой код выглядит следующим образом.
from matplotlib import rc
from sklearn import mixture
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
import matplotlib.ticker as tkr
import scipy.stats as stats
from matplotlib.patches import Rectangle
# create the data
np.random.seed(2)
x = np.concatenate((np.random.normal(5, 5, 1000),np.random.normal(10, 2, 1000)))
f = np.ravel(x).astype(np.float)
f = f.reshape(-1,1)
cmap = plt.get_cmap('jet')
low = 'r'
high = 'b'
# Use the bins to make a single histogram
h, bins, patches = plt.hist(f, bins=100, histtype='bar', density=True)
for i in range(40):
patches[i].set_facecolor(low)
for i in range(40,100):
patches[i].set_facecolor(high)
g = mixture.GaussianMixture(n_components=2,covariance_type='full')
g.fit(f)
weights = g.weights_
means = g.means_
covars = g.covariances_
f_axis = f.copy().ravel()
f_axis.sort()
gmm_y = np.exp(g.score_samples(f_axis.reshape(-1,1)))
plt.plot(f_axis,gmm_y.ravel(), c='black')
plt.xlabel("X", fontsize=16)
plt.ylabel("Y", fontsize=16)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
#create legend
handles = [Rectangle((0,0),1,1,color=c,ec="k") for c in [low,high]]
labels= ["low", "high"]
plt.legend(handles, labels)
plt.rcParams['agg.path.chunksize'] = 10000
plt.grid()
plt.show()
И мой результат заключается в следующем.
![enter image description here](https://i.stack.imgur.com/LYdqp.png)
Здесь я не знаю, как отличить guish между двумя распределениями, поэтому я просто установил bins=40
в заговор, хотя я знаю, что это не правильно.
Таким образом, я хочу выделить guish два распределения с разными цветами и построить отдельную линию для красного и синего распределений , Наконец, лучше добавить легенду.