Estoy tratando de trazar un gráfico en tiempo real usando GNUplot y C++. ¿Alguien sabe de alguna buena biblioteca que hace esto? GraciasCómo trazar gráficos en Gnuplot en tiempo real en C++?
Respuesta
gnuplot admite la entrada a través de tuberías (en Windows, hay un ejecutable por separado, pgnuplot
). Entonces su programa puede enviar nuevos comandos a gnuplot, como replot
, como si los estuviera escribiendo directamente en la interfaz gnuplot.
La forma de configurar la conexión de tubería y escribir en el extremo emisor de la tubería desde su programa C++ varía según el sistema operativo, por lo que tendrá que decirnos qué está utilizando si desea obtener más ayuda.
En Windows, hay CreatePipe
y luego configura el elemento hStdInput
del STARTUPINFO
estructura se pasa a CreateProcess
. Ídem con hStdOutput
si necesita los mensajes de estado de pgnuplot
.
En POSIX (Unix, Linux, Mac OSX, etc.), puede usar popen
como la forma más rápida de obtener una conexión unidireccional. Para bidireccional, funciona más como en Windows: pipe
para obtener identificadores en los extremos, luego fork
y en el proceso secundario llame al dup2
para asociar stdin y stdout con el conducto, luego exec
para reemplazar gnuplot
el proceso secundario, manteniendo las tuberías que preparar.
EDIT: De the gnuplot documentation:
El nombre de archivo especial ‘-’ especifica que los datos están en línea; es decir, ellos siguen el comando. Solo los datos siguen el comando; plot opciones como filtros, títulos y estilos de línea permanecen en el plot línea de comando. Este es similar a < < en script de shell unix, y $ DECK en VMS DCL. Los datos son ingresados como si se estuvieran leyendo desde un archivo, un punto de datos por registro . La letra "e" al inicio de la primera columna termina la entrada de datos . El usando opción se puede aplicar a estos datos - usarla para filtrar ellos a través de una función podría hacer sentido, pero la selección de columnas, probablemente no lo hace!
Si está interesado en el trazado en tiempo real, probablemente sea mejor utilizar una API api acelerada por hardware (como OpenGL) y trazar el gráfico usted mismo.
Am realmente espera utilizar gnuplot, porque eso es lo que Ready sé, he visto varias interfaces que los flujos de datos reales en gnuplot usando Perl, sino porque este es un trabajo para mi curso uni, la el director del curso realmente quiere que lo haga en C++. – chutsu
Defina qué significa "en tiempo real" para usted. Si esto significa "25 actualizaciones por segundo", entonces gnuplot probablemente no sea para ti. – etarion
1 parcela por segundo es suficiente para mí. – chutsu
¿Has probado gnuplot interfaces in ANSI C?, Esta es una interfaz para C, pero en los mismos enlaces hay alguna interfaz para C++. O puede intentar PlPlot.
Mire http://search.cpan.org/~dkogan/feedGnuplot-1.08/bin/feedGnuplot Esta es una utilidad de línea de comandos, pero también funciona bien si se controla desde un programa.
En mi código C++, esto funcionó (en Mac OsX Mavericks, usando g ++ Apple LLVM versión 5.0):
#include <sys/types.h>
#include <unistd.h>
...
// ready to make a plot
pid_t childpid=fork();
if(childpid==0) {
// child process makes plot
std::FILE* pipehandle=popen("gnuplot -persist","w");
// make some plot. You can send multiple commands to the pipe each ending in \n
std::fprintf(pipehandle,"plot \"results.txt\" using 1:2 with lines\n");
std::fprintf(pipehandle,"quit\n");
std::fflush(pipehandle);
std::fclose(pipehandle);
// child process exits
exit(0);
}
// parent process waits for child process to exit
waitpid(childpid,NULL,0);
// you can now repeat to make other gnuplots; all will appear simultaneously in the
// terminal and are persistent after the parent process has finished.
- 1. Gráficos en tiempo real en Java
- 2. Cómo trazar líneas específicas en GNUplot
- 3. trazar datos de audio en gnuplot
- 4. ¿Gráfico de gráficos/gráficos de Java en tiempo real?
- 5. cómo trazar línea con faltan puntos de datos en gnuplot
- 6. Gráficos/visualización WPF de datos en tiempo real
- 7. ¿Cómo se trazan los gráficos de barras en gnuplot?
- 8. ¿Cómo obtengo el valor en tiempo real del comando 'tiempo'?
- 9. Python: cómo trazar gráficos en 3D con Python?
- 10. Desinfección en tiempo real del código C
- 11. gnuplot trazado de línea de múltiples gráficos
- 12. Gráfico en tiempo real en MATLAB
- 13. Codificación de video wmv en tiempo real en C#
- 14. programación en tiempo real en Linux
- 15. aplicación C++ usando qt, cómo incluir gnuplot
- 16. cómo obtener un reloj de tiempo real en C#?
- 17. Interoperabilidad Java en tiempo real
- 18. gnuplot funcionalidad epslatex en matplotlib
- 19. ¿Cómo funcionan las actualizaciones en tiempo real?
- 20. cómo descargar jwplayer video en tiempo real?
- 21. Cómo grabar video en tiempo real?
- 22. Edición colaborativa en tiempo real: ¿cómo funciona?
- 23. ¿Grabar audio en tiempo real en java?
- 24. gnuplot para agrupar múltiples barras
- 25. Trazado dinámico en Gnuplot (dibujado en MATLAB)
- 26. node.js juego en tiempo real
- 27. Lucene indexación en tiempo real?
- 28. ¿Cómo mostrar un gráfico de barras apiladas en Gnuplot?
- 29. Gráficos en ASP.Net (C#)
- 30. Cómo trazar grandes vectores de datos con precisión en todos los niveles de zoom en tiempo real?
Pensé eso, pero ¿cuáles son los comandos para enviar puntos individuales? Solo sé cómo decirlo para trazar un archivo de datos o una función. ¿Cómo grafico como x1 y1, x2 y2, punto por punto? – chutsu
@chutsu: No proporcioné esos detalles porque dijiste que ya conocías la parte de gnuplot. De todos modos, agregó el párrafo relevante de la documentación. –