Рисование средней строки в гистограмме (matplotlib)
Я рисую гистограмму, используя matplotlib в python, и хотел бы нарисовать линию, представляющую среднее значение набора данных, наложенное на гистограмму в виде пунктирной линии (или, возможно, какой-то другой цвет тоже сделал бы). Любые идеи о том, как нарисовать линию, наложенную на гистограмму?
Я использую команду plot(), но не уверен, как нарисовать вертикальную линию (то есть какое значение я должен дать для оси y?
благодарю!
Ответы
Ответ 1
Вы можете использовать plot
или vlines
, чтобы нарисовать вертикальную линию, но чтобы нарисовать вертикальную линию снизу вверх, ось Y, вероятно, самая простая функция - использовать axvline
. Вот пример:
In [80]: import numpy as np
In [81]: import matplotlib.pyplot as plt
In [82]: np.random.seed(6789)
In [83]: x = np.random.gamma(4, 0.5, 1000)
In [84]: result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)
In [85]: plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)
Out[85]: <matplotlib.lines.Line2D at 0x119758828>
Результат:
![plot]()
Ответ 2
Это старая тема и незначительное добавление, но мне часто нравилось также рисовать среднее значение рядом со строкой:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(6789)
x = np.random.gamma(4, 0.5, 1000)
result = plt.hist(x, bins=20, color='c', edgecolor='k', alpha=0.65)
plt.axvline(x.mean(), color='k', linestyle='dashed', linewidth=1)
min_ylim, max_ylim = plt.ylim()
plt.text(x.mean()*1.1, max_ylim*0.9, 'Mean: {:.2f}'.format(x.mean()))
Который дает следующий результат:
![Average line with text]()
Ответ 3
Я бы посмотрел на наибольшее значение в вашем наборе данных (то есть на значения гистограммы) умножил это значение на число больше 1 (скажем, на 1,5) и использовал его для определения значения оси y. Таким образом, он будет отображаться над вашей гистограммой независимо от значений внутри гистограммы.