我是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轴标签时采用x+width/2.0
?
而且,如何在House Theft之前在图表的开头带一个小宽度?条形通常从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 :(得分: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轴上的刻度偏移一半宽度。不知道为什么要这样做,除了视觉效果。
>>> 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 :(得分: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词汇!