user55816: Arduino Serial Plotter does not allow analysis or saving of data. What are the best serial data graphing software (preferably free, but i don't mind if it's paid as long as it's better than the bare-bones Arduino Serial Plotter)?

It should work well with Arduino
It should allow plotting several variables on the same graph
Allow exporting data to CSV so i can show it in Excel.


user34529: Custom devices require custom solutions.
I suggest using Python (don't be scared).
This tutorial shows us how to read data from serial and save it to .csv file. You don't have to use a file. For example you can modify it to use an in memory list, and save just values from last 30 seconds. You can also read several values, and not just one.
import serial
import time
import csv

ser = serial.Serial('/dev/ttyACM0')
ser.flushInput()

while True:
    try:
        ser_bytes = ser.readline()
        decoded_bytes = float(ser_bytes[0:len(ser_bytes)-2].decode("utf-8"))
        print(decoded_bytes)
        with open("test_data.csv","a") as f:
            writer = csv.writer(f,delimiter=",")
            writer.writerow([time.time(),decoded_bytes])
    except:
        print("Keyboard Interrupt")
        break

This tutorial (and this one) shows you how very quickly to show a sophisticated plot of the data you collected. You can even make a plot that shows several graphs and updates in real time.
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()

Don't be scared it's not black magic. It just takes few days to understand how things work.

55816: <p>Arduino Serial Plotter does not allow analysis or saving of data. What are the best serial data graphing software (preferably free, but i don't mind if it's paid as long as it's better than the bare-bones Arduino Serial Plotter)?</p>

<ol>
<li><p>It should work well with Arduino</p></li>
<li><p>It should allow plotting several variables on the same graph</p></li>
<li><p>Allow exporting data to CSV so i can show it in Excel.</p></li>
</ol>
 34529: <p>Custom devices require custom solutions.</p>

<p>I suggest using Python (don't be scared).</p>

<p><a href="https://arduino.stackexchange.com/questions/66711/what-are-the-better-options-to-the-basic-arduino-serial-plotter">This tutorial</a> shows us how to read data from serial and save it to .csv file. You don't have to use a file. For example you can modify it to use an in memory list, and save just values from last 30 seconds. You can also read several values, and not just one.</p>

<pre><code>import serial
import time
import csv

ser = serial.Serial('/dev/ttyACM0')
ser.flushInput()

while True:
    try:
        ser_bytes = ser.readline()
        decoded_bytes = float(ser_bytes[0:len(ser_bytes)-2].decode("utf-8"))
        print(decoded_bytes)
        with open("test_data.csv","a") as f:
            writer = csv.writer(f,delimiter=",")
            writer.writerow([time.time(),decoded_bytes])
    except:
        print("Keyboard Interrupt")
        break
</code></pre>

<p><a href="https://matplotlib.org/users/pyplot_tutorial.html" rel="nofollow noreferrer">This tutorial</a> (and <a href="https://realpython.com/python-matplotlib-guide/" rel="nofollow noreferrer">this one</a>) shows you how very quickly to show a sophisticated plot of the data you collected. You can even make a plot that shows several graphs and updates in real time.</p>

<pre><code>import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
</code></pre>

<p>Don't be scared it's not black magic. It just takes few days to understand how things work.</p>
