Я пишу функцию для построения гистограммы, используя matplotlib
Я пытаюсь добавить вертикальную линию в mean, mean+2*sd, and mean-2*sd
.Линии появляются на графике, но метка, которую я им даю, отсутствует, есть идеи, как это исправить?
Также я пытаюсь поместить этот текст Mean = "for example x"
Но я использую жестко закодированную координацию plt.text(400, 0.015, "Mean = {}".format(round(mean, 3)))
Как я могу использовать программный способ вывести значения для координаты?то же самое в тонкой линии:
plt.axis([min(data), max(data), 0, 0.02])
Могу ли я получить минимальное и максимальное значения Y более эффективным способом вместо жесткого их кодирования?
def hist(location, data, mean, std, n_bins=20, x_label="", y_label="",
title=""):
samples = sorted(data)
x = np.linspace(min(samples), max(samples), 12)
y_pdf = stats.norm.pdf(x, mean, std)
y_skew_pdf = stats.skewnorm.pdf(x, *stats.skewnorm.fit(samples))
l1, = plt.plot(x, y_pdf, label='PDF')
l2, = plt.plot(x, y_skew_pdf, label='SKEW PDF')
# Compute histogram of Samples
n, bins, patches = plt.hist(samples, n_bins, density=True, facecolor='g', edgecolor='red', alpha=0.75)
plt.axvline(label='Mean', x=mean, linestyle=':', color='red')
plt.axvline(label='Mean-2*SD', x=round(mean-2*std, 3), linestyle='dashed')
plt.axvline(label='Mean+2SD', x=round(mean+2*std, 3), linestyle='dashed')
plt.xlabel(x_label)
plt.ylabel(y_label)
plt.title(title)
# The first plt.text arguments are coordinates x,y of the plot
plt.text(400, 0.015, "Mean = {}".format(round(mean, 3)))
plt.legend((l1, l2), (l1.get_label(), l2.get_label()), loc='upper right')
plt.axis([min(data), max(data), 0, 0.02])
plt.savefig(location)