Once you can stream one value over serial, the obvious next step is to stream several. CSV — comma-separated values — is the lazy-but-correct format. The plotter draws each column as its own line; spreadsheets import it directly; logging tools eat it without modification.
The pattern is print, comma, print, println
For a three-sensor stream: Serial.print(a); Serial.print(','); Serial.print(b); Serial.print(','); Serial.println(c);. The final println writes the newline that delimits the row. Add a header row in setup() (Serial.println("pot,light,temp");) and any tool reading the stream knows what each column means.
The trap to avoid: don't delay(1000) between rows unless you have to. Streaming as fast as the loop runs (often 1–10 kHz) gives you genuine time-series data. If your downstream tool is slow, it can sample; if it's fast, it doesn't have to wait for you.
The same protocol scales to ML training data
You're a CSV stream away from a thousand-row training dataset for a real-world ML model. Streaming an IMU's accelerometer + gyro + magnetometer to your laptop for a few minutes while you do specific gestures — that's labeled training data. Sensor logging on weather buoys works exactly this way. Telemetry from a Formula One car works exactly this way. CSV is boring, which is why it never breaks.