2015-09-06 8 views
1

Я новичок в программировании на Python. Я изучаю Python.Графическая диаграмма в python

Этот код помог мне построить гистограмму. Я пытаюсь понять код. я не мог понять, линии 5,6,7 и 8. т.е.

N = len(data) 
x = np.arange(1,N+1) 
y = [num for (s, num) in data ] 
labels = [ s for (s, num) in data ] 

Кроме того, почему мы принимая x+width/2.0 во время построения х меток осей? И как принести небольшую ширину в начале графика перед «Кражей дома»? Обычно панель начинается с 0. Я не уверен, как принести небольшую ширину перед началом первого бара. Я пробовал, но он не подходит.

Полная программа заключается в следующем.

import matplotlib.pyplot as plt 
import numpy as np 
data = [ ("House Theft", 57), ("House Fire", 48), 
      ("Car Theft", 156), ("Car Accident", 245)] 
N = len(data) 
x = np.arange(1,N+1) 
y = [num for (s, num) in data ] 
labels = [ s for (s, num) in data ] 
width = 0.35 #Use 1 to make it as a histogram 
bar1 = plt.bar(x, y, width, color="y") 
plt.ylabel('Frequency') 
plt.xticks(x + width/2.0, labels) 
plt.show() 
+0

'' 'data''' - это список - [' '' len'''] (https://docs.python.org/3/library/functions.html#len). ['' 'numpy'''] (http://docs.scipy.org/doc/numpy/user/) (' '' np''') - это библиотека - ['' 'np.arange''' ] (http://docs.scipy.org/doc/numpy-1.6.0/reference/generated/numpy.arange.html). Строки 7 и 8 - это [список понятий] (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions). – wwii

+0

@wwii Что означает эта строка 'num for (s, num) в данных? Я понимаю, что это диапазон. Что означают эти переменные s и num? Что-то связанное со строкой и числом? Что они здесь делают? –

+0

['' 'tuple''' распаковка] (https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences). Одна приятная вещь в интерпретируемом языке заключается в том, что вы можете легко поиграть с языковыми функциями в оболочке, чтобы попробовать что-нибудь и посмотреть, как это работает. Python имеет довольно хороший [Tutorial] (https://docs.python.org/3/tutorial/index.html). – wwii

ответ

1

Multiple assignment, tuple/sequence packing/unpacking:

>>> 
>>> data = [ ("House Theft", 57), ("House Fire", 48), 
      ("Car Theft", 156), ("Car Accident", 245)] 
>>> 
>>> for thing in data: 
    (s, num) = thing 
    print thing, '\t', s, '\t', num 

('House Theft', 57)  House Theft  57 
('House Fire', 48)  House Fire  48 
('Car Theft', 156)  Car Theft  156 
('Car Accident', 245) Car Accident 245 
>>> 

>>> for (s, num) in data: 
    print s, '\t\t', num 


House Theft   57 
House Fire   48 
Car Theft   156 
Car Accident  245 
>>> 

plt.xticks(x + width/2.0, labels) будет компенсировать тиков по оси х на половину ширины. Не уверен, почему это было сделано, за исключением, возможно, визуального эффекта.

>>> x = np.arange(1,11) 
>>> x 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> width = .5 
>>> x + width/2 
array([ 1.25, 2.25, 3.25, 4.25, 5.25, 6.25, 7.25, 8.25, 9.25, 10.25]) 
>>> 
+1

Я пробовал это сейчас. Это помогает мне понять это очень четко. Этот язык очень приятный. Я работал в C, C++ и Java. Сравнительно здесь все проще. Большое спасибо! –

0
  • N = len(data)

Значение N теперь длина массива data. В вашем случае длина data составляет 4.

  • x = np.arange(1,N+1)

Значение x теперь [1, 2, 3, 4] см этот пример из doc:

>>> np.arange(3) 
array([0, 1, 2]) 
>>> np.arange(3.0) 
array([ 0., 1., 2.]) 
>>> np.arange(3,7) 
array([3, 4, 5, 6]) 
>>> np.arange(3,7,2) 
array([3, 5]) 
  • y = [num for (s, num) in data ]

Значение y составляет [57, 48, 156, 245].

for (s, num) in data Итерирует значения data. Поскольку значения data имеют две части ("House Theft", 57), для каждого цикла s принимает значение первой части ("House Theft" для первого цикла) и num величина второй части (57 для первого цикла). Поскольку вам нужны только цифры (вторая часть), num for (s, num) in data принимает только num, и ваш массив заполняется ими, так как выражение находится между скобками [].

Он создает массив из «результата» выражения num for (s, num) in data.

  • labels = [ s for (s, num) in data ]

То же, что и раньше, но со строками вместо значения.

У меня все еще есть путаницы с номенклатурой (массив, кортеж, список ...), если кто-то может проверить мой ответ, я был бы признателен, поскольку это помогло бы и автору, и мне узнать правильный словарь на языке Python!

+0

Большое спасибо за четкое объяснение. –