Plot Cansat or any csv data using Python
From wikiluntti
Introduction
Many different methods exists. Here, we describe some. This use [[1]] data file. Download that and test the codes.
Theory of plotting log data
Method 1: CSV reader
Robust for errors in the csv file.
import csv
import matplotlib.pyplot as plt
#Create the array to store the datA
results = []
with open('satelliitti2021.txt') as csv_file:
csv_read=csv.reader(csv_file, delimiter=" ")
for row in csv_read:
results.append(row)
#choose the data:
col = 6
data = []
for row in results:
data.append( float( row[col] ) )
fig, ax = plt.subplots(figsize=(12,6))
print( data )
plt.plot( data )
plt.xlim([0,1600])
plt.ylim([-1, 5])
plt.show()
Method 2: Numpy
Does not care about the trailing spaces.
import matplotlib.pyplot as plt
import numpy as np
results = np.genfromtxt('satelliitti2021.txt', delimiter=' ')
fig, ax = plt.subplots(figsize=(12,6))
plt.plot( results[:,4] )
plt.xlim([0,1600])
plt.ylim([-1, 5])
plt.show()
Method 3: Pandas
Problems with trailing spaces.
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('satelliitti2021.txt',
sep=" ",
header = None,
names=["v1", "v2", "v3", "ax", "ay", "az"])
#data.columns = ["time", "v1", "v2", "v3", "ax", "ay", "az"]
df.index.name="foo"
print( df )
print( df.columns )
print(df.v1)
ax = df.plot()
ax.set_ylim(-1,5)
plt.show()
Real time plotting
How to use Python to plot data acquired from the usb (COM) port. Will plot it real time, and save the data to be analyzed later.
Method 1 on Windows
import csv
import matplotlib.pyplot as plt
#Create the array to store the datA
results = []
with open(r'C:\Users\OPPILAS\Documents\Arduino\lampotilamittaus.txt', encoding="utf-8") as csv_file:
csv_read=csv.reader(csv_file, delimiter=" ", quoting=csv.QUOTE_NONNUMERIC)
for row in csv_read:
results.append(row)
#print( row )
#choose the data:
col = 2
data = []
for row in results:
#print( row[col] )
data.append( row[col] )
fig, ax = plt.subplots(figsize=(12,6))
print( data )
plt.plot( data )
plt.xlim([0,1600])
plt.ylim([-1, 5])
plt.show()
Method 1 with more columns to be printed
The colums before adding one more T and the time:
- 0, 8: Temperatures
- 16, 18, 20: Accelerometer in xyz directions
Change
#choose the data:
cols = [16, 18, 20]
data = []
for row in results:
r = []
for c in cols:
r.append( row[c] )
print( r )
data.append( r )