void plot2(void) { int i; /* Set up the viewport and window using PLENV. The range in X is -2.0 to 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately (just = 0), and we draw a box with axes (axis = 1). */ plcol(1); plenv((PLFLT) -2.0, (PLFLT) 10.0, (PLFLT) -0.4, (PLFLT) 1.2, 0, 1); plcol(2); pllab("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function"); /* Fill up the arrays */ for (i = 0; i < 100; i++) { x[i] = (i - 19.0) / 6.0; y[i] = 1.0; if (x[i] != 0.0) y[i] = sin(x[i]) / x[i]; } /* Draw the line */ plcol(3); plline(100, x, y); }
static void plstrip_gen( PLStrip *strip ) { int i; PLFLT x[]={0.,1.,1.,0.}, y[]={0.,0.,1.,1.}; /* Set up window */ plvpor(0,1,0,1); plwind(0,1,0,1); plcol(0);plpsty(0); plfill(4, &x[0], &y[0]); plvsta(); /* Draw box and same window dimensions */ strip->wxmin=strip->xmin; strip->wxmax=strip->xmax; strip->wymin=strip->ymin; strip->wymax=strip->ymax; /* FIXME - can exist some redundancy here */ plwind(strip->xmin, strip->xmax, strip->ymin, strip->ymax); pllsty(1); plcol(strip->colbox); plbox(strip->xspec, 0.0, 0, strip->yspec, 0.0, 0); plcol(strip->collab); pllab(strip->labx, strip->laby, strip->labtop); for (i=0; i<PEN; i++) { if (strip->npts[i] > 0) { plcol(strip->colline[i]);pllsty(strip->styline[i]); plline(strip->npts[i], strip->x[i], strip->y[i]); } } plstrip_legend(strip,0); }
static void plstrip_legend(PLStrip *mystripc, int first) { int i; PLFLT sc, dy; /* draw legend */ plgchr(&sc, &dy); sc = dy = dy/100; plwind(-0.01, 1.01, -0.01, 1.01); for (i=0; i<PEN; i++) { if (mystripc->npts[i] || first) { plcol(mystripc->colline[i]); pllsty(mystripc->styline[i]); pljoin(mystripc->xlpos, mystripc->ylpos - sc, mystripc->xlpos + 0.1, mystripc->ylpos - sc); plcol(mystripc->collab); plptex(mystripc->xlpos + 0.11, mystripc->ylpos - sc, 0., 0., 0, mystripc->legline[i]); sc += dy; } } plwind(mystripc->xmin, mystripc->xmax, mystripc->ymin, mystripc->ymax); plflush(); }
void plot1(void) { int i; PLFLT xmin, xmax, ymin, ymax; for (i = 0; i < 60; i++) { x[i] = xoff + xscale * (i + 1) / 60.0; y[i] = yoff + yscale * pow(x[i], 2.); } xmin = x[0]; xmax = x[59]; ymin = y[0]; ymax = y[59]; for (i = 0; i < 6; i++) { xs1[i] = x[i * 10 + 3]; ys1[i] = y[i * 10 + 3]; } /* Set up the viewport and window using PLENV. The range in X is */ /* 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are */ /* scaled separately (just = 0), and we just draw a labelled */ /* box (axis = 0). */ plcol(1); plenv(xmin, xmax, ymin, ymax, 0, 0); plcol(6); pllab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2"); /* Plot the data points */ plcol(9); plpoin(6, xs1, ys1, 9); /* Draw the line through the data */ plcol(4); plline(60, x, y); }
void plot3(void) { int i; /* For the final graph we wish to override the default tick intervals, and so do not use PLENV */ pladv(0); /* Use standard viewport, and define X range from 0 to 360 degrees, Y range from -1.2 to 1.2. */ plvsta(); plwind((PLFLT) 0.0, (PLFLT) 360.0, (PLFLT) -1.2, (PLFLT) 1.2); /* Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. */ plcol(1); plbox("bcnst", (PLFLT) 60.0, 2, "bcnstv", (PLFLT) 0.2, 2); /* Superimpose a dashed line grid, with 1.5 mm marks and spaces. plstyl expects a pointer!! */ plstyl(1, &mark1, &space1); plcol(2); plbox("g", (PLFLT) 30.0, 0, "g", (PLFLT) 0.2, 0); plstyl(0, &mark0, &space0); plcol(3); pllab("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function"); for (i = 0; i < 101; i++) { x[i] = 3.6 * i; y[i] = sin(x[i] * 3.141592654 / 180.0); } plcol(4); plline(101, x, y); }
void shade(void) { int i, j; PLFLT x, y, argx, argy, distort; PLFLT **z, **w, zmin, zmax; PLFLT xg1[XPTS], yg1[YPTS]; PLcGrid cgrid1; PLcGrid2 cgrid2; PLFLT shade_min, shade_max, sh_color; PLINT sh_cmap = 1, sh_width; PLINT min_color = 1, min_width = 0, max_color = 0, max_width = 0; /* Set up function arrays */ plAlloc2dGrid(&z, XPTS, YPTS); plAlloc2dGrid(&w, XPTS, YPTS); /* Set up data array */ for (i = 0; i < XPTS; i++) { x = (double) (i - (XPTS / 2)) / (double) (XPTS / 2); for (j = 0; j < YPTS; j++) { y = (double) (j - (YPTS / 2)) / (double) (YPTS / 2) - 1.0; z[i][j] = - sin(7.*x) * cos(7.*y) + x*x - y*y; w[i][j] = - cos(7.*x) * sin(7.*y) + 2 * x * y; } } f2mnmx(z, XPTS, YPTS, &zmin, &zmax); for (i = 0; i < NCONTR; i++) clevel[i] = zmin + (zmax - zmin) * (i + 0.5) / (PLFLT) NCONTR; /* Set up coordinate grids */ cgrid1.xg = xg1; cgrid1.yg = yg1; cgrid1.nx = XPTS; cgrid1.ny = YPTS; plAlloc2dGrid(&cgrid2.xg, XPTS, YPTS); plAlloc2dGrid(&cgrid2.yg, XPTS, YPTS); cgrid2.nx = XPTS; cgrid2.ny = YPTS; for (i = 0; i < XPTS; i++) { for (j = 0; j < YPTS; j++) { mypltr((PLFLT) i, (PLFLT) j, &x, &y, NULL); argx = x * PI/2; argy = y * PI/2; distort = 0.4; cgrid1.xg[i] = x + distort * cos(argx); cgrid1.yg[j] = y - distort * cos(argy); cgrid2.xg[i][j] = x + distort * cos(argx) * cos(argy); cgrid2.yg[i][j] = y - distort * cos(argx) * cos(argy); } } /* Plot using identity transform */ pladv(0); plvpor(0.1, 0.9, 0.1, 0.9); plwind(-1.0, 1.0, -1.0, 1.0); for (i = 0; i < NCONTR; i++) { shade_min = zmin + (zmax - zmin) * i / (PLFLT) NCONTR; shade_max = zmin + (zmax - zmin) * (i +1) / (PLFLT) NCONTR; sh_color = i / (PLFLT) (NCONTR-1); sh_width = 2; plpsty(0); plshade(z, XPTS, YPTS, NULL, -1., 1., -1., 1., shade_min, shade_max, sh_cmap, sh_color, sh_width, min_color, min_width, max_color, max_width, plfill, 1, NULL, NULL); } plcol(1); plbox("bcnst", 0.0, 0, "bcnstv", 0.0, 0); plcol(2); /* plcont(w, XPTS, YPTS, 1, XPTS, 1, YPTS, clevel, NCONTR, mypltr, NULL); */ pllab("distance", "altitude", "Bogon density"); /* Clean up */ plFree2dGrid(z, XPTS, YPTS); plFree2dGrid(w, XPTS, YPTS); plFree2dGrid(cgrid2.xg, XPTS, YPTS); plFree2dGrid(cgrid2.yg, XPTS, YPTS); }
void c_plstripa( PLINT id, PLINT p, PLFLT x, PLFLT y ) { int j, yasc=0, istart; if (p >= PEN) { plabort("Non existent pen"); return; } if ((id < 0) || (id >= MAX_STRIPC) || ((stripc = strip[id]) == NULL)) { plabort("Non existent stripchart"); return; } /* Add new point, allocating memory if necessary */ if (++stripc->npts[p] > stripc->nptsmax[p]) { stripc->nptsmax[p] += 32; stripc->x[p] = (PLFLT *) realloc((void *) stripc->x[p], sizeof(PLFLT)*stripc->nptsmax[p]); stripc->y[p] = (PLFLT *) realloc((void *) stripc->y[p], sizeof(PLFLT)*stripc->nptsmax[p]); if (stripc->x[p] == NULL || stripc->y[p] == NULL) { plabort("plstripc: Out of memory."); plstripd(id); return; } } stripc->x[p][stripc->npts[p]-1] = x; stripc->y[p][stripc->npts[p]-1] = y; stripc->xmax = x; if (stripc->y_ascl == 1 && (y > stripc->ymax || y < stripc->ymin)) yasc=1; if (y > stripc->ymax) stripc->ymax = stripc->ymin + 1.1*(y - stripc->ymin); if (y < stripc->ymin) stripc->ymin = stripc->ymax - 1.1*(stripc->ymax - y); /* Now either plot new point or regenerate plot */ if (stripc->xmax - stripc->xmin < stripc->xlen) { if( yasc == 0) { /* If user has changed subwindow, make shure we have the correct one */ plvsta(); plwind(stripc->wxmin, stripc->wxmax, stripc->wymin, stripc->wymax); /* FIXME - can exist some redundancy here */ plcol(stripc->colline[p]); pllsty(stripc->styline[p]); if ((stripc->npts[p]-2) < 0) plP_movwor(stripc->x[p][stripc->npts[p]-1], stripc->y[p][stripc->npts[p]-1]); else plP_movwor(stripc->x[p][stripc->npts[p]-2], stripc->y[p][stripc->npts[p]-2]); plP_drawor(stripc->x[p][stripc->npts[p]-1], stripc->y[p][stripc->npts[p]-1]); plflush(); } else { stripc->xmax = stripc->xmin + stripc->xlen; plstrip_gen(stripc); } } else { /* Regenerating plot */ if (stripc->acc == 0) { for (j=0; j<PEN; j++) { if (stripc->npts[j] > 0) { istart = 0; while (stripc->x[j][istart] < stripc->xmin + stripc->xlen*stripc->xjump) istart++; stripc->npts[j] = stripc->npts[j] - istart; memcpy( &stripc->x[j][0], &stripc->x[j][istart], (stripc->npts[j])*sizeof(PLFLT)); memcpy( &stripc->y[j][0], &stripc->y[j][istart], (stripc->npts[j])*sizeof(PLFLT)); } } } else stripc->xlen = stripc->xlen * (1 + stripc->xjump); stripc->xmin = stripc->x[p][0]; stripc->xmax = stripc->xmax + stripc->xlen*stripc->xjump; plstrip_gen(stripc); } }