Подтвердить что ты не робот

Python plot простая гистограмма с заданными данными

У меня есть данные подсчета (100 из них), каждый из которых соответствует ячейке (от 0 до 99). Мне нужно построить эти данные как гистограмму. Однако гистограмма подсчитывает эти данные и не строит правильно, потому что мои данные уже вставлены.

import random
import matplotlib.pyplot as plt
x = random.sample(range(1000), 100)
xbins = [0, len(x)]
#plt.hist(x, bins=xbins, color = 'blue') 
#Does not make the histogram correct. It counts the occurances of the individual counts. 

plt.plot(x)
#plot works but I need this in histogram format
plt.show()
4b9b3361

Ответ 1

Если я понимаю, чего вы хотите достичь, то следующее должно предоставить вам то, что вы хотите:

import matplotlib.pyplot as plt
plt.bar(range(0,100), x)
plt.show()

Он не использует hist(), но похоже, что вы уже поместили свои данные в бункеры, чтобы там не было необходимости.

Ответ 2

Проблема с вашими xbins. В настоящее время у вас

xbins = [0, len(x)]

который предоставит вам список [0, 100]. Это означает, что вы увидите только 1 бит (не 2), ограниченный ниже на 0 и выше на 100. Я не совсем уверен, что вы хотите от своей гистограммы. Если вы хотите иметь 2 неравномерно расположенных ячейки, вы можете использовать

xbins = [0, 100, 1000]

чтобы показать все ниже 100 в одном бункере и все остальное в другом бункере. Другим вариантом было бы использование целочисленного значения для получения определенного количества равномерно разнесенных бункеров. Другими словами,

plt.hist(x, bins=50, color='blue')

где бины - это количество желаемых бункеров.

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

Ответ 3

Круто, спасибо! Вот что я думаю, что OP хотел сделать:

import random
import matplotlib.pyplot as plt
x=[x/1000 for x in random.sample(range(100000),100)]
xbins=range(0,len(x))
plt.hist(x, bins=xbins, color='blue')
plt.show()

Ответ 4

Я уверен, что ваша проблема - это бункеры. Это не список ограничений, а список ребер.

xbins = [0,len(x)]

возвращает в вашем случае список, содержащий [0, 100] Указание на то, что вы хотите, чтобы край корзины равнялся 0 и один на 100. Таким образом, вы получаете один бит от 0 до 100. Вы хотите:

xbins = [x for x in range(len(x))]

Что возвращает:

[0,1,2,3, ... 99]

Что указывает края бункера, которые вы хотите.

Ответ 5

Посмотрите на гистограмму examples в документации matplotlib. Вы должны использовать функцию hist. Если он по умолчанию не дает ожидаемого результата, затем используйте параметры hist и подготовьте/преобразуйте/измените свои данные, прежде чем предоставлять его hist. Мне не совсем ясно, чего вы хотите достичь, поэтому я не могу помочь на этом этапе.

Ответ 6

Вы можете достичь этого, используя гистограмму matplotlib, а также необходимость в numpy. Вы по существу уже создали бункеры как xbins. В этом случае x будет вашим весом.

plt.hist(xbins,weights=x)