Понимание синтаксиса синтаксиса 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)])
В частности:
Это то, что генерируется:
![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
Ответы
Ответ 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()]()
надеюсь, что это поможет.