Как добавить (или аннотировать) метки значений (или частоты) на диаграмме "гистограммы" matplotlib - PullRequest
1 голос
/ 01 августа 2020

Я хочу добавить частотные метки к гистограмме, созданной с помощью plt.hist.

Вот данные:

np.random.seed(30)
d = np.random.randint(1, 101, size = 25)
print(sorted(d))

Я поискал другие вопросы по stackoverflow, например: Добавление меток значений на гистограмму matplotlib и их ответы, но, по-видимому, объекты, возвращаемые plt.plot (kind = 'bar'), отличаются от тех, которые возвращаются plt.hist, и я получил ошибки при использовании Функции get_height или get width, как предлагается в некоторых ответах на гистограммы.

Точно так же не удалось найти решение, просматривая документацию matplotlib по гистограммам. получил эту ошибку

1 Ответ

1 голос
/ 01 августа 2020

Вот как мне это удалось. Если у кого-то есть предложения по улучшению моего ответа (в частности, для l oop и использования n = 0, n = n + 1, я думаю, что должен быть лучший способ написать для l oop без необходимости использовать n таким образом), я бы приветствовал это.

# import base packages
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# generate data
np.random.seed(30)
d = np.random.randint(1, 101, size = 25)
print(sorted(d))

enter image description here

# generate histogram

# a histogram returns 3 objects : n (i.e. frequncies), bins, patches
freq, bins, patches = plt.hist(d, edgecolor='white', label='d', bins=range(1,101,10))

# x coordinate for labels
bin_centers = np.diff(bins)*0.5 + bins[:-1]

n = 0
for fr, x, patch in zip(freq, bin_centers, patches):
  height = int(freq[n])
  plt.annotate("{}".format(height),
               xy = (x, height),             # top left corner of the histogram bar
               xytext = (0,0.2),             # offsetting label position above its bar
               textcoords = "offset points", # Offset (in points) from the *xy* value
               ha = 'center', va = 'bottom'
               )
  n = n+1

plt.legend()
plt.show;

введите описание изображения здесь

...