Come tracciare i dati in C
-
Usa la funzione
gnuplot
per controllare l’indicatore di fine file sul flusso di file -
Usa la funzione
popen
per trasmettere i dati del grafico al processognuplot
Questo articolo spiegherà diversi metodi su come tracciare i dati in C.
Usa la funzione gnuplot
per controllare l’indicatore di fine file sul flusso di file
gnuplot
è un potente programma di plottaggio che può essere utilizzato per visualizzare i grafici e salvarli come file. Viene generalmente utilizzato con set di dati di file con il semplice formato basato su colonne in cui ogni colonna è delimitata da un singolo spazio, come mostrato di seguito. In questo esempio, usiamo la funzione popen
per trasmettere i comandi al programma gnuplot
e tracciare i dati memorizzati in un file separato. La documentazione di gnuplot
può essere letta su questa pagina. In questo caso, utilizzeremo solo i comandi più semplici per dimostrare l’utilizzo.
Il comando plot
è la parte centrale che richiede diversi argomenti e parametri per elaborare e rendere il grafico. Forniamo un file con 2 colonne di numeri che devono essere tracciate come grafico a linee. Il comando ha il seguente formato plot 'input.txt' t 'Price' w lp
, che è costruito usando fprintf
e scritto nel puntatore del flusso di file restituito dalla chiamata popen
. L’identificatore t
nel comando è l’abbreviazione del titolo e della parola chiave w
- with
che indica lo stile del grafico. In questo caso, lo stile lp
(punti linea) viene scelto per rappresentare più punti di prezzo in un periodo specifico. Si noti che abbiamo esplicitamente fflush
il flusso per assicurarci che i dati siano consegnati al programma gnuplot
e infine mettiamo in pausa il programma con la funzione getchar
per assicurarci che il grafico sia visualizzato fino a quando l’utente non lo chiude.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
const char *filename = "input.txt";
FILE *gnuplot = popen("gnuplot", "w");
if (!gnuplot) {
perror("popen");
exit(EXIT_FAILURE);
}
fprintf(gnuplot, "plot \"%s\" t 'Price' w lp\n", filename);
fflush(gnuplot);
fprintf(stdout, "Click Ctrl+d to quit...\n");
getchar();
pclose(gnuplot);
exit(EXIT_SUCCESS);
}
Formato file di input:
2005 49
2006 52
...
2019 154
2020 127
2021 147
Usa la funzione popen
per trasmettere i dati del grafico al processo gnuplot
In alternativa, possiamo trasmettere i dati precedentemente memorizzati in un file separato direttamente dalla memoria del programma. La funzione popen
viene utilizzata di nuovo per aprire una comunicazione pipe al programma gnuplot
e quindi inviare i numeri memorizzati in array con una formattazione speciale. In questo esempio, il comando ha il formato - plot '-' u 1:2 t 'Price' w lp
, seguito dagli elementi dati e infine terminato con il carattere e
. Ogni numero intero deve essere separato da uno spazio e passato con un formato simile al file di input dell’esempio precedente. Quindi, utilizziamo la funzione fprintf
per scrivere testo formattato nel flusso pipe gnuplot
. Nota che, i flussi di file aperti con la chiamata popen
dovrebbero essere chiusi con la funzione pclose
.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int x[] = {2015, 2016, 2017, 2018, 2019, 2020};
int y[] = {344, 543, 433, 232, 212, 343};
FILE *gnuplot = popen("gnuplot", "w");
if (!gnuplot) {
perror("popen");
exit(EXIT_FAILURE);
}
fprintf(gnuplot, "plot '-' u 1:2 t 'Price' w lp\n");
for (int i = 0; i < 6; ++i) {
fprintf(gnuplot, "%d %d\n", x[i], y[i]);
}
fprintf(gnuplot, "e\n");
fprintf(stdout, "Click Ctrl+d to quit...\n");
fflush(gnuplot);
getchar();
pclose(gnuplot);
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook