17

我正在读一本书,我遇到了这段代码:

import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.title("Web traffic over the last month")
plt.xlabel("Time")
plt.ylabel("Hits/hour")
plt.xticks([w*7*24 for w in range(10)], 
  ['week %i'%w for w in range(10)])
plt.autoscale(tight=True)
plt.grid()
plt.show()

对于上下文,x是对应于一小时的整数数组。 y是那个特定小时内的一系列“点击”(从用户到网站)。

我知道代码会累积所有时间,以便它可以在一周内显示它们,但是有人可以解释一下这些功能的作用吗?我的目标是理解这一行的所有语法:

plt.xticks([w*7*24 for w in range(10)], 
  ['week %i'%w for w in range(10)])

具体来说:

  • 是什么range

这是生成的: 在此处输入图像描述

以下是其他上下文的示例数据:

1   2272
2   nan
3   1386
4   1365
5   1488
6   1337
7   1883
8   2283
9   1335
10  1025
11  1139
12  1477
13  1203
14  1311
15  1299
16  1494
17  1159
18  1365
19  1272
20  1246
21  1071
22  1876
23  nan
24  1410
25  925
26  1533
27  2104
28  2113
29  1993
30  1045
4

2 回答 2

12

range 是一个函数,python2它为给它的参数创建一个列表:

range(5) -> [0,1,2,3,4]
range(1,5) -> [1, 2, 3, 4]

通常range(lower_index, upper_index+1)会生成一个等同于 [ lower_index, upper_index]in的列表python2

您可以使用xrange以获得更好的性能(因为它使用惰性评估,在需要时进行计算)或者将range在.python3xrangepython2

现在换行:

plt.xticks([w*24*7 for w in range(10)],['week %i'%w for w in range(10)])

实际上xticks是您的 x 轴刻度或测量的间隔,因此,由于您的测量级别处于其中,hours因此最好在一周中的每个小时(即7 days * 24 hours)为数据集中的一周打勾,第二个列表理解放的是label's对于那一周的时间间隔( week 0, week 1 .....)

需要注意的一点是,实际上您从书中使用的数据集有 748 行,因此大约 (748/(24*7)) = 4.45 周,,

所以你真的可以使用 range(5) 来绘制图形,输出图被缩放到 week0 - week4 的原因是因为 line plt.autoscale(tight=True),如果没有plt.autoscale绘图会显示这样的东西。没有 plt.autoscale(tight=True) 和 plt.grid()

希望能帮助到你。

于 2015-04-28T19:18:08.567 回答
8

为了理解范围,打开python并依次编写以下命令:

 range(7) 
 range(4,8) 
 range(3,11,2)

对于 plt.xticks 中的列表推导,它们基本上是一种编写循环的紧凑方式。它们非常常见、有用且整洁。为了理解它们:

 [w*2 for w in range(10)] 
 [w*2 for w in range(10) if w < 4] 

最后,对于命令 plt.xticks 本身,您可以查看http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xticks以获得简单示例的非常简短的解释。

于 2013-10-17T17:56:47.803 回答