2017-11-15 1 views
1

Ich habe eine CSV-Datei, die vier Spalten enthält. Die erste Spalte in der Zeit, die zweite, dritte und vierte Spalte sind Beschleunigungsmesserablesungen. Ich möchte die Zeit auf der X-Achse und den Beschleunigungsmesser auf der Y-Achse darstellen.
Beispieldaten:Zeichnen Sie eine Grafik durch Lesen von Coulms aus CSV

0 1.0969 9.7721 0.614 
20 1.1146 9.7501 0.7444 
40 1.1146 9.7501 0.7444 
60 1.0124 9.7151 0.7169 
79 1.0124 9.7151 0.7169 
100 1.0927 9.7324 0.7356 
120 1.0927 9.7324 0.7356 

Hier ist, was ich bisher haben.

from numpy import genfromtxt 
import csv 
import matplotlib.pyplot as plt 
#import numpy as np 

# Open the desired file for reading 
f = open('walk-shoe.csv', "rb") 

# create a object of csv class and read the file 
# use ',' as a delimiter 
reader = csv.reader(f, delimiter=',') 

time_row = 0 
accel_1_row = 0 
accel_2_row = 0 
accel_3_row = 0 

time = [] 
accel_1 = [] 
accel_2 = [] 
accel_3 = [] 

# create a list of 'Time in ms' 
for row in reader: 
    # Skip the first row 
    time_row = time_row + 1 
if time_row == 1: 
    continue 
time.append(row[0]) 
accel_1.append(row[1]) 
accel_2.append(row[2]) 
accel_3.append(row[3]) 

# print the contents of the list 
# print time 
#print accel_1 
#print accel_2 
#print accel_3 

# append all the list accelerometer list together 
final_accel = [] 
final_accel.append(accel_1) 
final_accel.append(accel_2) 
final_accel.append(accel_3) 

#print final_accel 

# plot the graph 
for i in range(len(final_accel)): 
    plt.plot(time,[pt[i] for pt in final_accel],label = 'id %s'%i) 
plt.legend() 
plt.show() 

Ich möchte auf der y-Achse alle Sensorwerte in einem Diagramm zeichnen und Zeit in x-Achse

+0

die 'Valueerror x und y müssen gleichen ersten Dimension aufweisen, haben aber shapes' eine der häufigsten Fehler ist. Hast du es gegoogelt? Sie versuchen, 3 Werte gegen 1001 zu plotten. Das wird natürlich nicht funktionieren. – ImportanceOfBeingErnest

+0

Danke für die prompte Antwort. Ich habe es versucht, aber keine passenden Lösungen bekommen. – mgmihir

+0

Warum nicht? Jede Lösung besagt grundsätzlich, dass Sie nicht versuchen sollen, Listen unterschiedlicher Länge als x- und y-Werte zu plotten. – ImportanceOfBeingErnest

Antwort

1

Sie scheinen in den Code zu importieren numpy Sie geben, so will ich, dass, um das zu bedeuten Bibliothek steht Ihnen zur Verfügung. Mit Numpy können Sie sehr einfach Daten einlesen unter Verwendung von numpy.loadtxt().

Sie können dann eine for-Schleife erstellen, die durch die Spalten 1 bis 3 geht und Daten gegen die Spalte 0 (Zeit) plottet.

import numpy as np 
import matplotlib.pyplot as plt 

data = np.loadtxt('walk-shoe.csv', delimiter=',', dtype=float) 
print (data) 
#[[ 0.  1.0969 9.7721 0.614 ] 
# [ 20.  1.1146 9.7501 0.7444] 
# [ 40.  1.1146 9.7501 0.7444] 
# [ 60.  1.0124 9.7151 0.7169] 
# [ 79.  1.0124 9.7151 0.7169] 
# [ 100.  1.0927 9.7324 0.7356] 
# [ 120.  1.0927 9.7324 0.7356]] 

for i in range(1,data.shape[1]): 
    plt.plot(data[:,0], data[:,i], label='id %s' %i) 

plt.legend() 
plt.show() 

enter image description here

Verwandte Themen