Подтвердить что ты не робот

Понимание синтаксиса синтаксиса matplotlib

Я читаю книгу, и я натолкнулся на этот код:

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?

Это то, что генерируется: 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
4b9b3361

Ответ 1

Чтобы понять диапазон, откройте 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 за очень краткое объяснение с помощью простых примеров.

Ответ 2

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 для повышения производительности (поскольку он использует ленивую оценку, вычисляя, когда это необходимо) или range в python3 будет выполнять работу как xrange в python2.

теперь для строки:

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 недели,

так что вы действительно можете построить график, используя диапазон (5), причина, по которой график вывода масштабируется до недели-недели4, обусловлен линией plt.autoscale(tight=True), ну без plt.autoscale сюжет показал бы что-то вроде этого. wihtout plt.autoscale(tight=True) and plt.grid()

надеюсь, что это поможет.