web-dev-qa-db-fra.com

Utilisez une boucle pour tracer n diagrammes Python

J'ai un ensemble de données dans lequel je charge python en utilisant un pandas dataframe. Ce que je voudrais faire est de créer une boucle qui imprimera un tracé pour tous les éléments dans leur propre cadre, pas tous sur un. Mes données sont dans un fichier Excel structuré de cette manière:

Index | DATE  | AMB CO 1 | AMB CO 2 |...|AMB CO_n | TOTAL
1     | 1/1/12|  14      | 33       |...|  236    | 1600
.     | ...   | ...      | ...      |...|  ...    | ...
.     | ...   | ...      | ...      |...|  ...    | ...
.     | ...   | ...      | ...      |...|  ...    | ...
n

Voici ce que j'ai pour le code jusqu'à présent:

import pandas as pd
import matplotlib.pyplot as plt
ambdf = pd.read_Excel('Ambulance.xlsx', 
                      sheetname='Sheet2', index_col=0, na_values=['NA'])
print type(ambdf)
print ambdf
print ambdf['EAS']

amb_plot = plt.plot(ambdf['EAS'], linewidth=2)
plt.title('EAS Ambulance Numbers')
plt.xlabel('Month')
plt.ylabel('Count of Deliveries')
print amb_plot

for i in ambdf:
    print plt.plot(ambdf[i], linewidth = 2)

Je pense faire quelque chose comme ça:

for i in ambdf:
    ambdf_plot = plt.plot(ambdf, linewidth = 2)

Ce qui précède n’était pas ce que je voulais et cela vient de ma méconnaissance des Pandas, de MatplotLib, etc., en regardant certains documents, il me semble que matplotlib n’est même pas nécessaire (question 2)

Alors A) Comment puis-je produire un graphique de données pour chaque colonne de ma df et B) Dois-je utiliser matplotlib ou dois-je simplement utiliser pandas pour tout faire?)

Je vous remercie,

30
MCP_infiltrator

Ok, la méthode la plus simple pour créer plusieurs parcelles est la suivante:

import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
for i in range(len(x)):
    plt.figure()
    plt.plot(x[i],y[i])

Notez que vous devez créer un figure à chaque fois ou pyplot tracera dans le premier créé.

Si vous souhaitez créer plusieurs séries de données, il vous suffit de:

import matplotlib.pyplot as plt
x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
plt.plot(x[0],y[0],'r',x[1],y[1],'g',x[2],y[2],'b',x[3],y[3],'k')

Vous pouvez l’automatiser en ayant une liste de couleurs comme ['r','g','b','k'] puis appelez simplement les deux entrées de cette liste et les données correspondantes à tracer dans une boucle si vous le souhaitez. Si vous souhaitez simplement ajouter par programme des séries de données à un graphique, un résultat comme celui-ci le fera (aucun nouveau chiffre n'est créé à chaque fois, donc tout est tracé dans le même graphique):

 import matplotlib.pyplot as plt
 x=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
 y=[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10]]
 colours=['r','g','b','k']
 for i in range(len(x)):
    plt.plot(x[i],y[i],colours[i]) 

J'espère que cela t'aides. Si quelque chose matplotlib a un très bon page de documentation avec beaucoup de exemples .

38

Utilise un dictionnaire!!

Vous pouvez également utiliser des dictionnaires qui vous permettent d’avoir plus de contrôle sur les parcelles:

import matplotlib.pyplot as plt
#   plot 0     plot 1    plot 2   plot 3
x=[[1,2,3,4],[1,4,3,4],[1,2,3,4],[9,8,7,4]]
y=[[3,2,3,4],[3,6,3,4],[6,7,8,9],[3,2,2,4]]

plots = Zip(x,y)
def loop_plot(plots):
    figs={}
    axs={}
    for idx,plot in enumerate(plots):
        figs[idx]=plt.figure()
        axs[idx]=figs[idx].add_subplot(111)
        axs[idx].plot(plot[0],plot[1])
return figs, axs

figs, axs = loop_plot(plots)

Maintenant, vous pouvez sélectionner le tracé que vous souhaitez modifier facilement:

axs[0].set_title("Now I can control it!")
7
G M