2013-02-28 4 views
2

J'ai eu un projet très ambitieux (pour mon niveau novice) à utiliser sur un tableau numpy, où je charge une série de données, et de faire différentes parcelles en fonction de mes besoins - J'ai téléchargé un slim version de mon fichier de données input_data et voulait faire des graphiques basés sur: F (où je voudrais choisir le F désiré avant de boucler), et chaque série aura les données de la colonne E (par exemple A12 une série de données, A23 une autre série de données dans l'intrigue, etc) et sur l'axe X, je voudrais utiliser les valeurs correspondantes dans D.tracer plusieurs séries de données à partir du tableau numpy

ainsi pour résumer pour une valeur choisie sur la colonne FI veulent avoir 4 séries de données différentes (comme le nombre de variables sur colonne E) et les données doivent être de référence (axe des x) sur la valeur de la colonne D (qui est la date)

J'ai trébuché dans la première étape (bien que je passe trop de temps) où je voulais tracer toutes les données avec l'identificateur de colonne F comme une intrigue. Voici ce que j'ai jusqu'à présent

import os 
import numpy as np 
N = 8 #different values on column F 
M = 4 #different values on column E 
dataset = open('array_data.txt').readlines()[1:] 
data = np.genfromtxt(dataset) 
my_array = data 
day = len(my_array)/M/N # number of measurement sets - variation on column D 
for i in range(0, len(my_array), N): 
    plt.xlim(0,) 
    plt.ylim(-1, 2) 
    plt.plot(my_array[i, 0], my_array[i, 2], 'o') 
    plt.hold(True) 
plt.show() 

cela ne fait rien .... et je dois encore un long chemin à parcourir ..

+0

'genfromtxt' attend un * nom de fichier * ou un * objet de fichier *, pas une liste de chaînes. Essayez 'data = np.genfromtxt ('array_data.txt', skip_header = 1)'. Et essayez de déboguer une étape à la fois: assurez-vous d'avoir de bonnes données avant de tenter de les tracer. –

+0

@WarrenWeckesser merci pour l'indice; utile de connaître l'en-tête de saut; le [1:] à la fin de la ligne précédente s'occupe du problème d'en-tête - je peux charger les données, mais quand j'essaye que j'obtiens un seul point comme un complot – Dimitris

+0

avez-vous entendu parler de [pandas] (http : //pandas.pydata.org/)? Cela ressemble à quelque chose que vous pourriez vouloir utiliser. vous pouvez charger vos données dans un cadre de données et ensuite le tracer à partir de là. si vous donnez un échantillon des données que je peux vous montrer. – Raufio

Répondre

2

Avec pandas géants vous pouvez faire:

import pandas as pd 
dataset = pd.read_table("toplot.txt", sep="\t") 
#make D index (automatically puts it on the x axis) 
dataset.set_index("D", inplace=True) 
#plotting R vs. D 
dataset.R.plot() 
#plotting F vs. D 
dataset.F.plot() 

dataset est un objet DataFrame et DataFrame.plot est juste un wrapper autour de la fonction matplotlib pour tracer la série. Je ne comprends pas exactement comment vous voulez le représenter, mais il semble que vous ayez besoin de sélectionner certaines valeurs d'une colonne. Ce serait:

# get where F == 1000 
maskF = dataset.F == 1000 
# get the values where F == 1000 
rows = dataset[maskF] 
# get the values where A12 is in column E 
rows = rows[rows.E == "A12"] 
#remove the we don't want to see 
del rows["E"] 
del rows["F"] 
#Plot the result 
rows.plot(xlim=(0,None), ylim=(-1,2)) 
+0

merci pour l'exemple de code - je vais travailler dessus et vous faire savoir si je peux obtenir quelque chose (déjà eu 2 exceptions - se_index me donner des erreurs en double, et yin n'est pas défini ..) de toute façon - je publierai des mises à jour . Merci – Dimitris

+0

le set_index était juste pour la commodité. vous pouvez l'enlever et faire 'plot (x =" D ")' à la place. – Raufio

+0

semble obtenir des parcelles significatives !!! Je vais y travailler et revenir pour plus de questions sur le réglage final - merci! – Dimitris

Questions connexes