Гистограмма Python всегда содержит некорректные ячейки - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь построить гистограмму в Python с plt.hist .Это массив, который я бы хотел построить:

[162 162 162 161 162 157 162 161 164 161 163 160 155 162 160 154 162 162 163 160 162 157 162 160 165 161 162 161 155 163161 155 162 162 162 161 163 156 163 160 165 161 163 161 154 162 160 155 163 163 163 161 162 156 162 160 165 161 162 160 154 163 161 155 163 162 163 160 163 157 163 161 165 161 162 160 155 162 160 155164 164 159 155 161 159 158 160 161 161 155 159 154 154 156 155 160 160 163 158 160 163 159 156 159 162 156 163 155 154 156 152 158 158 154 156 158 158 156 157 158 160 160 159 153 152 153 150 154 155158 158 159 160 156 157 163 157 158 159 159 155 156 157 154 155 157 158 155 154 155 157 160 154 154 157 157 157 156 153 157 156 156 161 157 155 154 153 159 158 157 157 158 155 159 154 156 156 156 158159 155 150 148 158 159 156 157 157 155 157 158 158 158 157 156 157 153 159 156 160 156 158 156 156 153 156 156 157 157 157 157 160 157 156 156 159 155 154 158 156 155 154 160 158 158 159 155 155 158158 156 155 156 151158 157 156 156 155 158 158 159 157 155 158 157 154 157 157 157 159 155 156 154 156]

И это мой простой код:

hst = plt.hist(stego_histogram , bins=256) 
plt.show()

Этот массивпостроено с несколькими пикселями изображения.Очевидно, что 8-битное изображение глубины имеет 256 значений, поэтому я выбрал эти ячейки.Однако, поскольку это значение изменяется от 148 до 165, гистограмма возвращает значения из этого диапазона, но делится на 256 значений.

Я попытался настроить гистограмму с другими значениями бинов (16,17,18 ..)но это никогда не печатается хорошо.Это гистограмма с ячейками = 18:

enter image description here

Как правильно построить эту гистограмму?Я просто хочу гистограмму этого значения.Спасибо.

Ответы [ 4 ]

1 голос
/ 27 апреля 2019

Что делает гистограмма, так это просто подсчитывает, сколько раз значение повторяется, а затем строит вертикальную черту для каждого возможного значения, высота каждой вертикальной черты - это число вхождений этого значения.

Если вы хотите, чтобы полная гистограмма находилась в диапазоне от 0 до 255, вам нужно указать параметр под названием range в историческом вызове.

В противном случае вы также можете использовать метод bar из matplotlib, чтобы просто показать предоставленный вами массив.

Вот документация для бара matplot

0 голосов
/ 28 апреля 2019

IIUC, вы хотите что-то вроде этого:

counts, bins, _ = plt.hist(data, bins=range(256))
plt.show()

Вывод:

enter image description here

0 голосов
/ 27 апреля 2019

Вам нужна не гистограмма, а гистограмма для частот. Частоты могут быть вычислены с использованием Counter. В ответе ниже замените data на свой фактический список данных.

import matplotlib.pyplot as plt
from collections import Counter

data = [162, 162, 162, 161, 162, 157, 162, 159, 155, 155, 158, 158, 156]

freqs = Counter(data)
plt.bar(freqs.keys(), freqs.values())
plt.show()

enter image description here

0 голосов
/ 27 апреля 2019

Я действительно не знаю, почему, но с мусорными ведрами = 17 все в порядке. Проблема заключалась в том, что интервалы не были целыми, как вы можете видеть на графике, который я прикрепил. Я пробовал это значение бинов раньше, но оно не работает. Извините и спасибо за ваши ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...