Betrachten Sie Asymptote . Es ist kostenlos, Open Source, Multi- C++
Plattform, verwendet -ähnliche Sprache zur Beschreibung von Vektorgrafiken und zum Umgang mit Daten und arbeitet mit dieser LaTeX
zusammen, um Textbeschriftungen zu erstellen . Es ist in den mehr oder weniger zurückgegebenen LaTeX
Distributionen enthalten (zB TexLive
).
Diese Abbildung ist beispielsweise ein Versuch, das fragliche Bild zu simulieren (Funktionen sind willkürlich, nur um ein ähnliches Aussehen zu erhalten):
Es wurde vom Asymptote
Code generiert
// // plotfigure.asy // // run // asy plotfigure.asy // to get plotfigure.pdf settings.tex="pdflatex"; import graph; import palette; real w=9cm,h=w; size(w,h,IgnoreAspect); import fontsize;defaultpen(fontsize(9pt)); texpreamble("\usepackage\usepackage[free-standing-units=true]"); real xmin=-2,xmax=7; real ymin=-22,ymax=0; real dxmin=0.2; real dxmax=0.4; real dymin=0; real dymax=0; string NoLabel(real x) typedef real realFuncReal(real); realFuncReal f(real z){ return new real(real t){ real x=t*0.6; return 10*z*(-exp(-x^2)-2*exp(-(x-2.2)^2)); }; } real phiMin=-5.7, phiMax=171.9; int n=2000; //int n=100; pen[] pal=Wheel(n);// BWRainbow(n); n=pal.length; real t; for(int i=0;i<n;++i){ t=i/(n-1); draw(graph(f(t),xmin,xmax),pal[i]); } void PaletteBar(pen[] pal,transform tr=identity()){ guide bar=box((-1,-1),(1,1)); int n=pal.length-1; for(int i=0;i<n;++i){ axialshade(tr*box((-1,-1)+(2*i/n,0),(-1,-1)+(2*(i+1)/n,2)) ,pal[i ], (-1,-1)+(2*i/n, 0) ,pal[i+1], (-1,-1)+(2*(i+1)/n,0) ); } } void PaletteLabels(string[] lab,real[] labRelPos,transform tr=identity()){ int n=lab.length; assert(n==labRelPos.length); for(int i=0;i<n;++i){ label(lab[i],tr*(-1+2*labRelPos[i],-1), shiftless(tr)*plain.S); } } xaxis("Distance (\angstrom)", YEquals(ymin),xmin-dxmin,xmax+dxmax,RightTicks(Step=1,step=0.5 )); xaxis(YEquals(ymax),xmin-dxmin,xmax+dxmax,LeftTicks(Step=1,step=0.5,ticklabel=NoLabel )); yaxis("Free Energy (kkal/mol)" ,XEquals(xmin-dxmin),ymin-dymin,ymax+dymax,LeftTicks (Step=2,step=1) ); yaxis( XEquals(xmax+dxmax),ymin-dymin,ymax+dymax,RightTicks (Step=2,step=1,ticklabel=NoLabel) ); transform tr=shift(1,-16)*rotate(-90)*scale(2,0.25); PaletteBar(pal,tr); real labPosCalc(real labVal){ return (labVal-phiMin)/(phiMax-phiMin); } real[] palLabelValue={-5.7,83.1,171.9}; PaletteLabels( sequence(new string(int n), palLabelValue.length ), sequence(new real(int n), palLabelValue.length ), tr ); label(rotate(90)*("Angle (\degree)"),shift(-1,0)*tr*(0,-1),plain.W); shipout(bbox(Fill(paleyellow)));