web-dev-qa-db-fra.com

Comprendre la syntaxe matplotlib xticks

Je lis un livre et je suis tombé sur ce code:

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()

Pour le contexte, x est un tableau d'entiers correspondant à une heure. y est un tableau de "hits" (des utilisateurs vers un site Web) au cours de cette heure particulière.

Je comprends que le code accumule toutes les heures pour qu'il puisse les afficher en une semaine, mais quelqu'un pourrait-il expliquer ce que font ces fonctions? Mon objectif est de comprendre toute la syntaxe de cette ligne:

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

Plus précisément:

  • Qu'est-ce que range?

C'est ce qui est généré: enter image description here

Voici des exemples de données pour un contexte supplémentaire:

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
15
user1477388

Afin de comprendre la plage, ouvrez python et écrivez en séquence les commandes suivantes:

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

Pour les listes de compréhension dans les plt.xticks, elles sont fondamentalement un moyen compact d'écrire des boucles. Ils sont très courants, utiles et soignés. Pour les comprendre:

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

Enfin, pour la commande plt.xticks elle-même, vous pouvez vérifier http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.xticks pour une explication très brève avec des exemples simples.

7
Jblasco

range est une fonction dans python2 qui fait une liste pour l'argument qui lui est donné:

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

en général range(lower_index, upper_index+1) générera une liste équivalente à [ lower_index, upper_index] dans python2,

vous pouvez utiliser xrange pour de meilleures performances (car il utilise une évaluation paresseuse, calculant quand cela est nécessaire) ou range dans python3 fera le travail comme xrange dans python2.

maintenant pour la ligne:

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

en fait xticks est l'intervalle pour vos graduations ou mesures sur l'axe x, de sorte que votre niveau de mesure est en hours il est donc préférable de cocher pour chaque heure de la semaine (c'est-à-dire 7 days * 24 hours) pour la semaine dans l'ensemble de données, et la deuxième liste de compréhension met le label's pour cet intervalle d'une semaine ( week 0, week 1 .....),

un point à noter est qu'en réalité l'ensemble de données que vous avez utilisé dans le livre a 748 lignes, donc environ (748/(24 * 7)) = 4,45 semaines,

donc vous pouvez vraiment tracer le graphique en utilisant la plage (5), la raison pour laquelle le tracé de sortie est mis à l'échelle à semaine0 - semaine4 est à cause de la ligne plt.autoscale(tight=True), bien sans plt.autoscale le tracé aurait montré quelque chose comme ça.wihtout plt.autoscale(tight=True) and plt.grid()

j'espère que cela aide.

11
lazarus