2017-08-10 3 views
1

Mon problème est de tracer deux fichiers CSV différents avec des fréquences et des intervalles de valeur différents. Je veux juste faire une comparaison sur heartRate et motionData en temps unitaire.Comment tracer différentes données dans différentes fréquences dans le même graphique?

J'utilise matplotlib pour y parvenir.

code suivant me donne un tel graphe:

import numpy as np 
import pandas 
import matplotlib.pyplot as plt 

# fake data 
x = np.genfromtxt('/Users/yusufkamilak/Desktop/motionData.csv', delimiter=',', skip_header=10, 
        skip_footer=0, names=['TimeStamp', 'AccelerationX']) 
y = np.genfromtxt('/Users/yusufkamilak/Desktop/heartRate.csv', delimiter=',', skip_header=2, 
        skip_footer=0, names=['TimeStamp', 'Value']) 

# data frames 
xdf = pandas.DataFrame(x) 
ydf = pandas.DataFrame(y) 

# plot x data, get an MPL axes object 
ax = xdf.plot() 

# plot y data, using the axes already created 
ydf.plot(ax=ax) 



plt.show() 

Heart Rate frequency should be extended to motionData fréquence de la fréquence cardiaque devrait être étendue à motionData

This is how HeartRate normally looks in ~1/6 Hz Voici comment HeartRate ressemble normalement dans ~ 1/6 Hz

Puisque motionData a plus de 60 000 lignes de valeurs, heartRate a l'air de ne jamais exister. Mais les intervalles de temps des deux valeurs sont les mêmes. Obtenir la fréquence cardiaque toutes les 5-6 secondes et motionData 10 fois par seconde.

Toute aide sera appréciée, j'ai vérifié beaucoup de questions avant de poser cette question mais je n'ai pas pu trouver celle qui m'aide à résoudre mon problème. Merci!

+0

Vous avez également besoin de données pour l'axe des x. Soit votre dataframe a déjà ces données dans une colonne, soit vous devez créer cette colonne. Puis 'df.plot (x = 'TimeStamp', y = 'Valeur')' – ImportanceOfBeingErnest

+0

On m'a dit d'appliquer une interpolation linéaire pour obtenir l'extension des données les plus fréquentes à une valeur plus élevée et les dessiner dans le même graphique. J'ai regardé la fonction interp de numpy mais je ne pouvais pas comprendre ce que fp est. En passant, si vous écrivez votre réponse comme réponse, je peux l'approuver comme réponse acceptée. Merci pour l'aide. @ImportanceOfBeingErnest –

Répondre

1

Vous avez également besoin de données pour l'axe des x.
Soit votre base de données contient déjà ces données dans une colonne, soit vous devez créer cette colonne. Puis

ax = xdf.plot(x='TimeStamp', y=['AccelerationX', 'AccelerationY']) 
ydf.plot(x='TimeStamp', y='Value', ax=ax) 

montreraient toutes les courbes avec ce que TimeStamp est sur l'axe x.

L'utilisation de l'interpolation linéaire est certes possible, mais peut ne pas avoir beaucoup de sens, puisque les lignes d'un tracé de ligne font exactement cela: elles connectent deux points linéairement.