Pregunta

Esta es mi primera publicación y soy bastante novato en C ++ y compilación en general.

Estoy compilando un programa que requiere que se dibujen algunos gráficos. El programa crea un archivo .dat y luego debo abrir gnuplot y escribir el argumento ' .dat'. Eso está bien.

¿Hay alguna manera de hacer que gnuplot se abra automáticamente y me muestre la trama que necesito? Debería usar alguna función system () en el código para llamar a gnuplot, pero ¿cómo puedo hacer que él dibuje lo que necesito?

Lo siento por mi inglés no perfecto: s

Gracias por la atención de todos modos!

¿Fue útil?

Solución

Dependiendo de su sistema operativo, puede usar popen (). Esto te permitiría generar un proceso de gnuplot y simplemente escribirlo como cualquier otro ARCHIVO *.

Si tiene puntos de datos para trazar, puede pasarlos en línea con el gráfico " - " ... opción. Del mismo modo, es posible que desee explorar las opciones establecer puntos de estilo de datos / líneas / puntos de línea / etc .


Sin pausa o persistencia, gnuplot terminará al final de la secuencia de entrada. En su caso de ejemplo, sería cuando se llega al final del archivo.


Para producir (escribir) un archivo de salida (gráfico), use:

set terminal png small
set output "filename.png"

Hay muchas opciones para configurar terminal . Png suele estar ahí. Si no, quizás gif, tiff o jpeg?

¡Cuidado con sobrescribir el archivo!

Es posible que desee utilizar establecer tamaño 2,2 para hacer un gráfico más grande. Algunas variantes de set terminal también le permiten especificar el tamaño.

Otros consejos

También estoy aprendiendo esto hoy. Aquí hay un pequeño ejemplo que cociné.

#include <iostream>
#include <fstream> 
using namespace std;
int main(int argc, char **argv) {
    ofstream file("data.dat");
    file << "#x y" << endl;
    for(int i=0; i<10; i++){
        file << i << ' ' << i*i << endl;
    }
    file.close();
    return 0;
}

Guarde eso como plot.cpp y compile eso con g ++:

g++ plot.cpp -o plot

Ejecute el programa para crear el archivo .dat:

./plot

Guarde la siguiente secuencia de comandos gnuplot como plot.plt:

set terminal svg enhanced size 1000 1000 fname "Times" fsize 36
set output "plot.svg"
set title "A simple plot of x^2 vs. x"
set xlabel "x"
set ylabel "y"
plot "./data.dat" using 1:2 title ""

Ejecute el script con gnuplot para generar su archivo .svg:

gnuplot plot.plt

El gráfico resultante estará en plot.svg. Si omite las primeras dos líneas que especifican la salida, se representará en una ventana. ¡Que te diviertas!

A veces es tan fácil como uno puede pensar

    gnuplot file

donde archivo no es ni sus datos ni su archivo de resultados, sino un archivo con el comando que escribiría en la línea de comandos. Simplemente ingrese los comandos que necesita (ya sea el archivo constante que tenga o lo genere). Después de ejecutar todos los comandos en ese archivo, gnuplot sale.

Sí, puedes. Puede crear un archivo que tenga los comandos que de otro modo escribiría para configurar la trama y abrir gnuplot ejecutándose desde ese archivo. Este enlace tiene un artículo que explica cómo hacerlo. También puede enviar a un EPS u otros formatos de salida gráficos y mostrar el gráfico utilizando otro widget que se lee en el archivo.

Es posible que deba usar el indicador '-persist' para el comando. Sé que en los sistemas * nix, este indicador es obligatorio si desea que la ventana de trazado permanezca después de que el proceso de gnuplot haya finalizado y salido.

gnuplot -persist commands.gp

Además, puedes poner tantos comandos de gnuplot como quieras en el archivo. El archivo actúa como una secuencia de comandos por lotes en este sentido.

Es posible que necesites agregar una línea

pause -1

Esto mostrará el gráfico hasta que se haya presionado el retorno.
Lo que probablemente está viendo es que gnuplot se ejecuta y sale antes de que la gráfica tenga tiempo para mostrarse.

Es posible que necesite establecer un tipo de terminal. Lee la documentación de gnuplot sobre eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top