Veri görselleştirmesi: 3 veri sütunundan özel 2D çizim nasıl yapılır?


0

Son zamanlarda aşağıdaki arsa buldum:

arsa

ve bunun gibi bir şeyin örneğin Gnuplot (veya başka bir yazılım) ile yapılıp yapılmadığını merak ediyorum. Üç sütun halinde veriye sahibim, yani uzaklık açısı enerjisi. Herhangi bir fikri olan var mı?


Bu arsa okuyabilirim emin değilim. X2 eksenine paralel ve x2 renk kodlu bir izleme vektörüyle çizilen, y enerjisi, y1 f ve x2 açılı y = f (x1, y2) gibi görünür. Bu doğru mu? Daha sonra gnuplot, lekeyle ve doğru görüş açısını ayarlayarak bunu yapabilir.
Joce

Yanıtlar:


0

Asimptot'u düşünün . Ücretsiz, açık kaynak kodlu, çoklu C++platform, vektör grafiklerini tanımlamak ve verileri işlemek için benzer bir dil kullanıyor ve LaTeXmetin etiketleri oluşturmak için işbirliği yapıyor . Daha az ya da az kızgın LaTeXdağıtımlara (örn. TexLive) Dahil edilir .

Örneğin, bu rakam söz konusu resmi simüle etme girişimidir (işlevler sadece biraz benzer bir görünüm için keyfidir):

görüntü tanımını buraya girin

AsymptoteKod tarafından oluşturuldu

//
// 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{lmodern}\usepackage[free-standing-units=true]{siunitx}");

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){return "";}

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){return string(palLabelValue[n]);}, palLabelValue.length ),
sequence(new real(int n){return labPosCalc(palLabelValue[n]);}, palLabelValue.length ),
tr
);

label(rotate(90)*("Angle (\degree)"),shift(-1,0)*tr*(0,-1),plain.W);

shipout(bbox(Fill(paleyellow)));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.