Überlagern Sie einen Graphen über einen anderen GraphenLeute,
Was sind die Möglichkeiten (oder der beste Weg), um einen anderen Graphen über einen anderen zu legen, wie im ersten Anhang gezeigt? Das Endziel besteht darin, mehrere Plots zu generieren und sie in einem Fenster anzuordnen, das als Tabelleneigenschaft gespeichert wird. Diese Tabelleneigenschaft wird dann ausgeführt, damit das endgültige zusammengesetzte Bild kopiert und in Powerpoint eingefügt werden kann.
Das Skript, das ich bisher habe, bringt mich fast dorthin (siehe angehängtes Skript und 2. Anhang). Mein aktuelles Skript geht offensichtlich für jedes generierte Diagramm in den Bericht und ein "Get Picture"-Befehl wird verwendet, um die Lineup-Box zu füllen. Ich habe versucht, das Histogramm nur als Bild zu behandeln und ein "Bild hinzufügen" auszuführen, konnte es jedoch nicht zum Laufen bringen.
Wenn ein Befehl zum Hinzufügen von Bildern der richtige Weg ist, lautet meine zusätzliche Frage, wie ich die "Grenzen" -Argumente für eine ordnungsgemäße Positionierung angemessen finden kann.
Neil
cr = Current Data Table() << Run Script("Cumulative Resistivity");
rpt_cr = Report(cr);
rpt_cr_pic = rpt_cr[PictureBox(1)] << Get Picture;
ds = Current Data Table() << Run Script("Distribution");
rpt_ds = Report(ds);
rpt_ds_pic = rpt_ds[ListBox(4)] << Get Picture;
//comb = New Image( rpt_ds_pic );
//rpt_cr_pic << Add Image( comb, bounds(left(0), top(500),bottom(0),right(724)));
nw = Eval Expr( New Window("BR",
a = V List Box(
Lineup Box(N Col(2), rpt_cr_pic, rpt_ds_pic ),
)
)
);
Current Data Table() << New Script("RP", nw) ;


GrafikSkriptingRe: Überlagerung eines Graphen auf einen anderen GraphenNur der Übersichtlichkeit halber versuche ich, ein Bild eines Diagramms (über Get Picture) über ein anderes Diagrammbild zu legen.
Also erhalte ich gemäß dem Skript das Bild "rpt_ds_pic" und versuche, rpt_cr_pic zu überlagern. Ich erhalte jedoch nur das rpt_cr_pic für meine Ausgabe, das hinzugefügte Bild wird nicht angezeigt.
Ich habe den Scripting-Index (Add Image) und die Scripting-Anleitung durchgesehen, aber ich verstehe offensichtlich kein grundlegendes Konzept, das dies ermöglicht.
Jeder Hinweis oder jede Richtung wäre äußerst hilfreich.
Vielen Dank.
Neil
cr = Current Data Table() << Run Script("Cumulative Resistivity");
rpt_cr = Report(cr);
rpt_cr_pic = rpt_cr[PictureBox(1)] << Get Picture;
ds = Current Data Table() << Run Script("Distribution");
rpt_ds = Report(ds);
rpt_ds_pic = rpt_ds[PictureBox(1)] << Get Picture;
comb = New Image( rpt_ds_pic );
rpt_cr_pic << Add Image( comb, bounds(left(0), top(500),bottom(0),right(724)));
nw = Eval Expr( New Window("BR",
a = V List Box(
Lineup Box(N Col(2), rpt_cr_pic, /*rpt_ds_pic*/ ),
)
)
);
Current Data Table() << New Script("RP", nw) ;
Re: Überlagerung eines Graphen auf einen anderen GraphenHallo,
Die einzige mir bekannte Methode ist wie folgt:
1) Holen Sie sich Ihre Bilder und erhalten Sie die Pixelmatrizen dafür.
2) Überschreiben Sie eine Untermatrix der Pixel des "unteren" Bildes mit der Pixelmatrix des "oberen" Bildes.
Unten ist ein Skript, das dies veranschaulicht, und ein Bild (eigentlich ein Fenster mit 3 Bildern, in dem das "oberste" Bild an verschiedenen Stellen "eingefügt" wurde) das die Ergebnisse zeigt. Möglicherweise müssen Sie experimentieren, um Ihr Bild an die gewünschte Position zu bringen, aber dieser Ansatz sollte schließlich ausreichen.
names default to here(1);
//make a table
dt = astable(J(50,2,randomuniform()));
//make a graph
gb = dt << Graph Builder(
Size( 500, 500 ),
Show Control Panel( 0 ),
Variables( X( :col1 ), Y( :col2 ) ),
Elements( Points( X, Y, Legend( 5 ) ) ),
);
//save to a picture, get the pixels and get the picture's x and y dimemnsions
pic1 = (report(gb)[framebox(1)] << get picture) << get pixels;
pic1y = nrow(pic1);
pic1x = ncol(pic1);
//now make another graph and do the same
dist = dt << distribution(histograms only, y(:col1));
pic2 = (report(dist)[framebox(1)] << get picture) << get pixels;
pic2y = nrow(pic2);
pic2x = ncol(pic2);
//create a window to place the resulting images
nw = new window("xx",
vlb = vlistbox(
)
);
x = y = 1; //initial "corner" of overwritten pixels... we will increment these and do 3 total pictures
for(i = 1, i<=3, i++,
newPic = pic1;
newPic[ y::(y+pic2y-1), x::(x+pic2x-1), ] = pic2;
vlb << append(picturebox(new image(newPic)));
y += 60;
x+= 150;
);

Prost,
Brady
Re: Überlagerung eines Graphen auf einen anderen GraphenBrady,
Ich habe gerade etwas bekommen, das heute vorhin zu funktionieren schien, aber ich möchte auch Ihren Ansatz unter die Lupe nehmen.
Basierend auf dem Befehl "Bild hinzufügen" (und dem Beispiel) im Scripting-Index konnte ich das unten gezeigte Bild abrufen. Mein einziges Problem war, dass die Grafikbox die einzige Anzeigeelementbox zu sein schien, die es mir ermöglichte, das Ergebnis zu erhalten. Außerdem sind die X- und Y-Achse noch vorhanden, und ich bin mir nicht sicher, wie ich sie ausblenden kann. Mein Code ist angehängt.
Neil

Re: Überlagerung eines Graphen auf einen anderen Graphencr = Current Data Table() << Run Script("Cumulative Resistivity");
rpt_cr = Report(cr);
rpt_cr_pic = rpt_cr[PictureBox(1)] << Get Picture ;
Print(rpt_cr_pic << Get Size);
cp = Current Data Table() << Run Script("Cumulative Permeability");
rpt_cp = Report(cp);
rpt_cp_pic = rpt_cp[PictureBox(1)] << Get Picture;
Print(rpt_cp_pic << Get Size);
ds = Current Data Table() << Run Script("Distribution");
rpt_ds = Report(ds);
rpt_ds_pic = rpt_ds[PictureBox(1)] << Get Picture;
g = Graph Box(
FrameSize( 750, 1000 ),
X Scale( 0, 100 ),
Y Scale( 0, 100 ),
<<ADD image=""></ADD>