理解matplotlib xticks语法

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 是在那个特定小时内从用户到网站的“点击次数”(hit)数组。

我知道这段代码累加所有小时,以便可以在一周内显示它们,但是能否有人解释一下这些函数是做什么的?我的目标是理解这行代码的所有语法:

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

具体而言:

  • range 是什么?

这是生成的内容: enter image description here

以下是提供更多背景信息的示例数据:

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

5
理解 range 的建议: 打开 Python 并输入:range(7) 当您看到结果时,输入:range(4,8) 完成后输入:range(3,11,2) - Jblasco
3
对于其他内容,这被称为列表推导式。我认为纯粹主义者会原谅我,如果这不是100%准确的话,但它基本上是一种紧凑的循环写法。你可以通过Google搜索了解它,它非常常见、有用和整洁。为了理解它们,你可以尝试以下两个例子: [w2 for w in range(10)] 和 [w2 for w in range(10) if w < 4] - Jblasco
4
@Jblasco - 我们原谅你,但这是一个“列表推导式”。 - Robᵩ
@Robᵩ 我改口了...有趣的是我一开始写对了,然后又改成了错误的顺序。我需要更多的咖啡。谢谢! - Jblasco
@Jblasco 你能把那些注释写成答案吗? - tacaswell
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] 的列表,在 Python2 中。你可以使用 xrange 来获得更好的性能(因为它使用惰性求值,在需要计算时才计算),或者在 Python3 中使用 range 来完成与 Python2xrange 相同的工作。现在看看这一行:
plt.xticks([w*24*7 for w in range(10)],['week %i'%w for w in range(10)])

实际上xticks是您的x轴刻度或度量间隔,因此由于您的测量级别是按小时计算的,所以最好为数据集中每个小时打上一个刻度(即7天* 24小时), 而第二个列表推导式则为该一周间隔 (第0周,第1周......)放置。

需要注意的一点是,实际上您从书中使用的数据集具有748行,因此大约是(748 /(24 * 7))= 4.45周,因此您可以使用范围(5)绘制图形, 输出图形缩放到周0 - 周4是因为行 plt.autoscale(tight = True),没有plt.autoscale,图形将显示像这样:wihtout plt.autoscale(tight=True) and plt.grid()

希望它有所帮助。


8
为了理解range,打开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,其中提供了简短的说明和简单的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接