Datenvisualisierung: Wie erstellt man aus 3 Datenspalten eine spezielle 2D-Darstellung?

390
alchemist

Ich habe kürzlich folgende Handlung gefunden:

Handlung

und ich bin neugierig, ob so etwas zB mit Gnuplot (oder anderer Software) möglich ist? Ich habe Daten in drei Spalten, dh Abstandswinkel. Hat jemand irgendwelche Ideen?

0
Ich bin nicht sicher, ob ich diesen Plot lesen kann. Es sieht aus wie y = f (x1, y2) mit y-Energie, x1-Abstand und x2-Winkel, mit einem Betrachtungsvektor parallel zur x2-Achse und x2-farbcodiert. Ist das richtig? Dann kann es gnuplot mit Splot und Einstellung des korrekten Blickwinkels tun. Joce vor 6 Jahren 0

1 Antwort auf die Frage

0
g.kov

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 LaTeXzusammen, um Textbeschriftungen zu erstellen . Es ist in den mehr oder weniger zurückgegebenen LaTeXDistributionen 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 AsymptoteCode 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)));