Plot Cansat or any csv data using Python: Difference between revisions

From wikiluntti
Line 81: Line 81:


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.
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 ===
<syntaxhighlight lanɣ="python">
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()
</syntaxhighlight>


== References ==
== References ==

Revision as of 17:15, 16 February 2023

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()

References