⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gnuplot_i.c

📁 图像置乱代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  @param	d		Array of doubles.  @param	n		Number of values in the passed array.  @param	title	Title of the plot.  @return	void  Plots out a 2d graph from a list of doubles. The x-coordinate is the  index of the double in the list, the y coordinate is the double in  the list.  Example:  @code    gnuplot_ctrl    *h ;    double          d[50] ;    int             i ;    h = gnuplot_init() ;    for (i=0 ; i<50 ; i++) {        d[i] = (double)(i*i) ;    }    gnuplot_plot_x(h, d, 50, "parabola") ;    sleep(2) ;    gnuplot_close(h) ;  @endcode *//*--------------------------------------------------------------------------*/void gnuplot_plot_x(    gnuplot_ctrl    *   handle,    double          *   d,    int                 n,    char            *   title){    int     i ;	int		tmpfd ;    char    name[128] ;    char    cmd[GP_CMD_SIZE] ;    char    line[GP_CMD_SIZE] ;	if (handle==NULL || d==NULL || (n<1)) return ;    /* Open one more temporary file? */    if (handle->ntmp == GP_MAX_TMP_FILES - 1) {        fprintf(stderr,                "maximum # of temporary files reached (%d): cannot open more",                GP_MAX_TMP_FILES) ;        return ;    }    /* Open temporary file for output   */	sprintf(name, "%s/gnuplot-i-XXXXXX", P_tmpdir);    if ((tmpfd=mkstemp(name))==-1) {        fprintf(stderr,"cannot create temporary file: exiting plot") ;        return ;    }    /* Store file name in array for future deletion */    strcpy(handle->to_delete[handle->ntmp], name) ;    handle->ntmp ++ ;    /* Write data to this file  */    for (i=0 ; i<n ; i++) {		sprintf(line, "%g\n", d[i]);		write(tmpfd, line, strlen(line));    }    close(tmpfd) ;    /* Command to be sent to gnuplot    */    if (handle->nplots > 0) {        strcpy(cmd, "replot") ;    } else {        strcpy(cmd, "plot") ;    }        if (title == NULL) {        sprintf(line, "%s \"%s\" with %s", cmd, name, handle->pstyle) ;    } else {        sprintf(line, "%s \"%s\" title \"%s\" with %s", cmd, name,                      title, handle->pstyle) ;    }    /* send command to gnuplot  */    gnuplot_cmd(handle, line) ;    handle->nplots++ ;    return ;}/*-------------------------------------------------------------------------*//**  @brief	Plot a 2d graph from a list of points.  @param	handle		Gnuplot session control handle.  @param	x			Pointer to a list of x coordinates.  @param	y			Pointer to a list of y coordinates.  @param	n			Number of doubles in x (assumed the same as in y).  @param	title		Title of the plot.  @return	void  Plots out a 2d graph from a list of points. Provide points through a list  of x and a list of y coordinates. Both provided arrays are assumed to  contain the same number of values.  @code    gnuplot_ctrl    *h ;	double			x[50] ;	double			y[50] ;    int             i ;    h = gnuplot_init() ;    for (i=0 ; i<50 ; i++) {        x[i] = (double)(i)/10.0 ;        y[i] = x[i] * x[i] ;    }    gnuplot_plot_xy(h, x, y, 50, "parabola") ;    sleep(2) ;    gnuplot_close(h) ;  @endcode *//*--------------------------------------------------------------------------*/void gnuplot_plot_xy(    gnuplot_ctrl    *   handle,	double			*	x,	double			*	y,    int                 n,    char            *   title){    int     i ;	int		tmpfd ;    char    name[128] ;    char    cmd[GP_CMD_SIZE] ;    char    line[GP_CMD_SIZE] ;	if (handle==NULL || x==NULL || y==NULL || (n<1)) return ;    /* Open one more temporary file? */    if (handle->ntmp == GP_MAX_TMP_FILES - 1) {        fprintf(stderr,                "maximum # of temporary files reached (%d): cannot open more",                GP_MAX_TMP_FILES) ;        return ;    }    /* Open temporary file for output   */	sprintf(name, "%s/gnuplot-i-XXXXXX", P_tmpdir);    if ((tmpfd=mkstemp(name))==-1) {        fprintf(stderr,"cannot create temporary file: exiting plot") ;        return ;    }    /* Store file name in array for future deletion */    strcpy(handle->to_delete[handle->ntmp], name) ;    handle->ntmp ++ ;    /* Write data to this file  */    for (i=0 ; i<n; i++) {        sprintf(line, "%g %g\n", x[i], y[i]) ;		write(tmpfd, line, strlen(line));    }    close(tmpfd) ;    /* Command to be sent to gnuplot    */    if (handle->nplots > 0) {        strcpy(cmd, "replot") ;    } else {        strcpy(cmd, "plot") ;    }        if (title == NULL) {        sprintf(line, "%s \"%s\" with %s", cmd, name, handle->pstyle) ;    } else {        sprintf(line, "%s \"%s\" title \"%s\" with %s", cmd, name,                      title, handle->pstyle) ;    }    /* send command to gnuplot  */    gnuplot_cmd(handle, line) ;    handle->nplots++ ;    return ;}/*-------------------------------------------------------------------------*//**  @brief	Open a new session, plot a signal, close the session.  @param	title	Plot title  @param	style	Plot style  @param	label_x	Label for X  @param	label_y	Label for Y  @param	x		Array of X coordinates  @param	y		Array of Y coordinates (can be NULL)  @param	n		Number of values in x and y.  @return  This function opens a new gnuplot session, plots the provided  signal as an X or XY signal depending on a provided y, waits for  a carriage return on stdin and closes the session.  It is Ok to provide an empty title, empty style, or empty labels for  X and Y. Defaults are provided in this case. *//*--------------------------------------------------------------------------*/void gnuplot_plot_once(	char	*	title,	char	*	style,	char	*	label_x,	char	*	label_y,	double	*	x,	double	*	y,	int			n){	gnuplot_ctrl	*	handle ;	if (x==NULL || n<1) return ;	if ((handle = gnuplot_init()) == NULL) return ;	if (style!=NULL) {		gnuplot_setstyle(handle, style);	} else {		gnuplot_setstyle(handle, "lines");	}	if (label_x!=NULL) {		gnuplot_set_xlabel(handle, label_x);	} else {		gnuplot_set_xlabel(handle, "X");	}	if (label_y!=NULL) {		gnuplot_set_ylabel(handle, label_y);	} else {		gnuplot_set_ylabel(handle, "Y");	}	if (y==NULL) {		gnuplot_plot_x(handle, x, n, title);	} else {		gnuplot_plot_xy(handle, x, y, n, title);	}	printf("press ENTER to continue\n");	while (getchar()!='\n') {}	gnuplot_close(handle);	return ;}/*-------------------------------------------------------------------------*//**  @brief	Plot a slope on a gnuplot session.  @param	handle		Gnuplot session control handle.  @param	a			Slope.  @param	b			Intercept.  @param	title		Title of the plot.  @return	void  Plot a slope on a gnuplot session. The provided slope has an  equation of the form y=ax+b  Example:  @code    gnuplot_ctrl    *   h ;    double              a, b ;    h = gnuplot_init() ;    gnuplot_plot_slope(h, 1.0, 0.0, "unity slope") ;    sleep(2) ;    gnuplot_close(h) ;  @endcode *//*--------------------------------------------------------------------------*/    void gnuplot_plot_slope(    gnuplot_ctrl    *   handle,    double              a,    double              b,    char            *   title){    char    stitle[GP_TITLE_SIZE] ;    char    cmd[GP_CMD_SIZE] ;    if (title == NULL) {        strcpy(stitle, "no title") ;    } else {        strcpy(stitle, title) ;    }    if (handle->nplots > 0) {        sprintf(cmd, "replot %g * x + %g title \"%s\" with %s",                      a, b, title, handle->pstyle) ;    } else {        sprintf(cmd, "plot %g * x + %g title \"%s\" with %s",                      a, b, title, handle->pstyle) ;    }    gnuplot_cmd(handle, cmd) ;    handle->nplots++ ;    return ;}/*-------------------------------------------------------------------------*//**  @brief	Plot a curve of given equation y=f(x).  @param	h			Gnuplot session control handle.  @param	equation	Equation to plot.  @param	title		Title of the plot.  @return	void  Plots out a curve of given equation. The general form of the  equation is y=f(x), you only provide the f(x) side of the equation.  Example:  @code        gnuplot_ctrl    *h ;        char            eq[80] ;        h = gnuplot_init() ;        strcpy(eq, "sin(x) * cos(2*x)") ;        gnuplot_plot_equation(h, eq, "sine wave", normal) ;        gnuplot_close(h) ;  @endcode *//*--------------------------------------------------------------------------*/void gnuplot_plot_equation(    gnuplot_ctrl    *   h,    char            *   equation,    char            *   title){    char    cmd[GP_CMD_SIZE];    char    plot_str[GP_EQ_SIZE] ;    char    title_str[GP_TITLE_SIZE] ;    if (title == NULL) {        strcpy(title_str, "no title") ;    } else {        strcpy(title_str, title) ;    }    if (h->nplots > 0) {        strcpy(plot_str, "replot") ;    } else {        strcpy(plot_str, "plot") ;    }    sprintf(cmd, "%s %s title \"%s\" with %s",                   plot_str, equation, title_str, h->pstyle) ;    gnuplot_cmd(h, cmd) ;    h->nplots++ ;    return ;}/* vim: set ts=4 et sw=4 tw=75 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -