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()
Ответы
Ответ 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)