void leg_discrete(t_psdata ps,real x0,real y0,char *label, real fontsize,char *font,int nmap,t_mapping map[]) { int i; real yhh; real boxhh; boxhh=fontsize+DDD; /* LANDSCAPE */ ps_rgb(ps,BLACK); ps_strfont(ps,font,fontsize); yhh=y0+fontsize+3*DDD; if ((int)strlen(label) > 0) ps_ctext(ps,x0,yhh,label,eXLeft); ps_moveto(ps,x0,y0); for(i=0; (i<nmap); i++) { ps_setorigin(ps); ps_rgb(ps,&(map[i].rgb)); ps_fillbox(ps,DDD,DDD,DDD+fontsize,boxhh-DDD); ps_rgb(ps,BLACK); ps_box(ps,DDD,DDD,DDD+fontsize,boxhh-DDD); ps_ctext(ps,boxhh+2*DDD,fontsize/3,map[i].desc,eXLeft); ps_unsetorigin(ps); ps_moverel(ps,DDD,-fontsize/3); } }
void leg_continuous(t_psdata ps,real x0,real x,real y0,char *label, real fontsize,char *font, int nmap,t_mapping map[], int mapoffset) { int i; real xx0; real yhh,boxxh,boxyh; boxyh=fontsize; if (x<8*fontsize) x=8*fontsize; boxxh=(real)x/(real)(nmap-mapoffset); if (boxxh>fontsize) boxxh=fontsize; /* LANDSCAPE */ xx0=x0-((nmap-mapoffset)*boxxh)/2.0; for(i=0; (i<nmap-mapoffset); i++) { ps_rgb(ps,&(map[i+mapoffset].rgb)); ps_fillbox(ps,xx0+i*boxxh,y0,xx0+(i+1)*boxxh,y0+boxyh); } ps_strfont(ps,font,fontsize); ps_rgb(ps,BLACK); ps_box(ps,xx0,y0,xx0+(nmap-mapoffset)*boxxh,y0+boxyh); yhh=y0+boxyh+3*DDD; ps_ctext(ps,xx0+boxxh/2,yhh,map[0].desc,eXCenter); if ((int)strlen(label) > 0) ps_ctext(ps,x0,yhh,label,eXCenter); ps_ctext(ps,xx0+((nmap-mapoffset)*boxxh) - boxxh/2,yhh,map[nmap-1].desc,eXCenter); }
void plot_phi(char *fn,rvec box,int natoms,rvec x[],real phi[]) { t_psdata eps; real phi_max,rr,gg,bb,fac,dx,x0,y0; real offset; int i; phi_max=phi[0]; rr=gg=bb=0.0; for(i=0; (i<natoms); i++) phi_max=max(phi_max,fabs(phi[i])); if (phi_max==0.0) { fprintf(stderr,"All values zero, see .out file\n"); return; } offset=20.0; fac=15.0; #ifdef DEBUG fprintf(stderr,"Scaling box by %g\n",fac); #endif eps=ps_open(fn,0,0, (real)(fac*box[XX]+2*offset),(real)(fac*box[YY]+2*offset)); ps_translate(eps,offset,offset); ps_color(eps,0,0,0); ps_box(eps,1,1,(real)(fac*box[XX]-1),(real)(fac*box[YY]-1)); dx=0.15*fac; for(i=0; (i<natoms); i++) { rr=gg=bb=1.0; if (phi[i] < 0) gg=bb=(1.0+(phi[i]/phi_max)); else rr=gg=(1.0-(phi[i]/phi_max)); rr=rgbset(rr); gg=rgbset(gg); bb=rgbset(bb); ps_color(eps,rr,gg,bb); x0=fac*x[i][XX]; y0=fac*x[i][YY]; ps_fillbox(eps,(real)(x0-dx),(real)(y0-dx),(real)(x0+dx),(real)(y0+dx)); } ps_close(eps); }
static void draw_boxes(t_psdata ps,real x0,real y0,real w, int nmat,t_matrix mat[],t_psrec *psr) { char buf[12]; char *mylab; real xxx; char **xtick,**ytick; real xx,yy,dy,xx00,yy00,offset_x,offset_y; int i,j,x,y,ntx,nty,strlength; /* Only necessary when there will be no y-labels */ strlength = 0; /* Draw the box */ ps_rgb(ps,BLACK); ps_linewidth(ps,psr->boxlinewidth); yy00=y0; for(i=0; (i<nmat); i++) { dy=box_height(&(mat[i]),psr); ps_box(ps,x0-1,yy00-1,x0+w+1,yy00+dy+1); yy00+=dy+box_dh(psr)+box_dh_top(IS_ONCE,psr); } /* Draw the ticks on the axes */ ps_linewidth(ps,psr->ticklinewidth); xx00=x0-1; yy00=y0-1; for (i=0; (i<nmat); i++) { if (mat[i].flags & MAT_SPATIAL_X) { ntx = mat[i].nx + 1; offset_x = 0.1; } else { ntx = mat[i].nx; offset_x = 0.6; } if (mat[i].flags & MAT_SPATIAL_Y) { nty = mat[i].ny + 1; offset_y = 0.1; } else { nty = mat[i].ny; offset_y = 0.6; } snew(xtick,ntx); for(j=0; (j<ntx); j++) { sprintf(buf,"%g",mat[i].axis_x[j]); xtick[j]=strdup(buf); } ps_strfont(ps,psr->X.tickfont,psr->X.tickfontsize); for(x=0; (x<ntx); x++) { xx = xx00 + (x + offset_x)*psr->xboxsize; if ( ( bRmod(mat[i].axis_x[x], psr->X.offset, psr->X.major) || (psr->X.first && (x==0))) && ( (i == 0) || box_do_all_x_maj_ticks(psr) ) ) { /* Longer tick marks */ ps_line (ps,xx,yy00,xx,yy00-psr->X.majorticklen); /* Plot label on lowest graph only */ if (i == 0) ps_ctext(ps,xx, yy00-DDD-psr->X.majorticklen-psr->X.tickfontsize*0.8, xtick[x],eXCenter); } else if ( bRmod(mat[i].axis_x[x], psr->X.offset, psr->X.minor) && ( (i == 0) || box_do_all_x_min_ticks(psr) ) ){ /* Shorter tick marks */ ps_line(ps,xx,yy00,xx,yy00-psr->X.minorticklen); } else if ( bRmod(mat[i].axis_x[x], psr->X.offset, psr->X.major) ) { /* Even shorter marks, only each X.major */ ps_line(ps,xx,yy00,xx,yy00-(psr->boxspacing/2)); } } ps_strfont(ps,psr->Y.tickfont,psr->Y.tickfontsize); snew(ytick,nty); for(j=0; (j<nty); j++) { sprintf(buf,"%g",mat[i].axis_y[j]); ytick[j]=strdup(buf); } for(y=0; (y<nty); y++) { yy = yy00 + (y + offset_y)*psr->yboxsize; if ( bRmod(mat[i].axis_y[y], psr->Y.offset, psr->Y.major) || (psr->Y.first && (y==0))) { /* Major ticks */ strlength=max(strlength,(int)strlen(ytick[y])); ps_line (ps,xx00,yy,xx00-psr->Y.majorticklen,yy); ps_ctext(ps,xx00-psr->Y.majorticklen-DDD, yy-psr->Y.tickfontsize/3.0,ytick[y],eXRight); } else if ( bRmod(mat[i].axis_y[y], psr->Y.offset, psr->Y.minor) ) { /* Minor ticks */ ps_line(ps,xx00,yy,xx00-psr->Y.minorticklen,yy); } } sfree(xtick); sfree(ytick); /* Label on Y-axis */ if (!psr->bYonce || i==nmat/2) { if (strlen(psr->Y.label) > 0) mylab = psr->Y.label; else mylab = mat[i].label_y; if (strlen(mylab) > 0) { ps_strfont(ps,psr->Y.font,psr->Y.fontsize); ps_flip(ps,TRUE); xxx=x0-psr->X.majorticklen-psr->X.tickfontsize*strlength-DDD; ps_ctext(ps,yy00+box_height(&mat[i],psr)/2.0,612.5-xxx, mylab,eXCenter); ps_flip(ps,FALSE); } } yy00+=box_height(&(mat[i]),psr)+box_dh(psr)+box_dh_top(IS_ONCE,psr); } /* Label on X-axis */ if (strlen(psr->X.label) > 0) mylab = psr->X.label; else mylab = mat[0].label_x; if (strlen(mylab) > 0) { ps_strfont(ps,psr->X.font,psr->X.fontsize); ps_ctext(ps,x0+w/2,y0-DDD-psr->X.majorticklen-psr->X.tickfontsize*FUDGE- psr->X.fontsize,mylab,eXCenter); } }