Построение данных с использованием процентной единицы

#python #matplotlib

#python #matplotlib

Вопрос:

Я использовал Google для поиска, но я не нашел ответа.

Моя проблема:

У меня есть массив данных, и я хотел бы построить график с использованием процентной единицы. Пример:

данные: [1, 3, 1, 3, 3, 2, 4, 5]

  • 1: 0.25

  • 2: 0.125

  • 3: 0.375

  • 4: 0.125

  • 5: 0.125

PS: я не хочу использовать R, только python, matplotlib и, если нужно, numpy

Комментарии:

1. Ваш вопрос о том, как поместить «%» в ylabel или вы хотите преобразовать данные? Если да, то каким образом?

2. Я использую matplotlib.ticker для метки формата. Я ищу модуль / функцию… чтобы узнать представление части совокупности: en.wikipedia.org/wiki/Population . У @DTing, похоже, есть «ручной», но хороший способ.

Ответ №1:

Взгляните на функцию hist в matplotlib: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.hist В Numpy также есть функция гистограммы: http://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html

Ответ №2:

редактировать: извините, что неправильно истолковал ваш вопрос, я думал, вы имели в виду только python. Мы надеемся, что кто-нибудь опубликует решение matplotlib или numpy.

вот один из способов сделать это, отсортировав список:

 >>> a = [1, 3, 1, 3, 3, 2, 4, 5]
>>> 
>>> def unit_percents(L1):
...     ret = {}
...     L = L1[:]
...     sorted(L)
...     if L:
...         cur_count = 1
...         for i in range(len(L)-1):
...             cur_count =1
...             if L[i] != L[i 1]:
...                 ret[L[i]]=float(cur_count)/len(L)
...                 cur_count=1
...         ret[L[-1]]=float(cur_count)/len(L)
...     return ret
... 
>>> unit_percents(a)
{1: 0.25, 2: 0.25, 3: 0.375, 4: 0.25, 5: 0.125}
  

также:

 >>> dict([(x,float(a.count(x))/len(a)) for x in set(a)])
{1: 0.25, 2: 0.125, 3: 0.375, 4: 0.125, 5: 0.125}
>>> 
  

Комментарии:

1. Спасибо за ваш ответ, если они еще не являются функцией для этого, я воспользуюсь вашим способом. Большое спасибо