R-Plot durch JSL/JMPIch habe dieses Skript, wie unten zu sehen, wo ich einige einfache Berechnungen in R durchführe und wo ich einige Diagramme in JSL sehen möchte. Ich kann JSL nicht dazu bringen, die beiden Diagramme anzuzeigen. Wenn ich den Code unten ausführe, schließt es Diagramm 1 und zeigt nur Diagramm 2. Ich habe versucht, das zu verwenden, was hier beschrieben wird ( https://community.jmp.com/t5/JMPer-Cable/Getting-started-with-the-JMP-to-R-Interface/ba-p/43920 ), aber ich bekomme es nicht zum Laufen. Es mag ein einfacher Befehl sein, aber ich bin ziemlich neu bei JSL. Ich hoffe, Sie können helfen. Zu Ihrer Information: Ich verwende JMP 17.2
Die Namen werden standardmäßig hier verwendet(1);
Include("Dialog_script.jsl"); //Dialog laden, um ausgewählte X- und Y-Spalten abzurufen
dt = Current Data Table(); // Aktuelle Datentabelle abrufen
// Die ausgewählten X- und Y-Spalten aus der Datentabelle holen
xCol = Spalte(dt, xColName[1]);
yCol = Spalte(dt, yColName[1]);
//Überprüfen, ob Spalten vorhanden sind
Wenn (xCol == Empty() | yCol == Empty(),
Throw("Fehler: Die ausgewählten Spalten existieren nicht in der Datentabelle.");
);
// Extrahieren Sie die Werte aus xCol und yCol
xValues = xCol << Werte abrufen; // Werte von xCol abrufen
yValues = yCol << Werte abrufen; // Werte von yCol abrufen
//Zeige die an R gesendeten Werte (zum Debuggen)
Anzeigen(xWerte);
Anzeigen(yWerte);
// Initialisiere die R-Verbindung
R Init();
//Sende die Werte von xCol und yCol als numerische Vektoren an R
R Senden( xWerte );
R Senden(yWerte);
// Führe das externe R-Skript aus
R Datei übermitteln( "C:/Benutzer/NDS/Data_Ana.R" );
// Rufe den Plot ab
R senden( "drucken(plot1)" );
R senden( "drucken(plot2)" );
// Beenden Sie die R-Verbindung
//R-Term();
Automatisierung und SkriptingDatenexploration und -visualisierungWindowsBetreff: R-Plot durch JSL/JMPIch glaube, was Sie sehen, ist, dass Plot 2 Plot 1 sofort ersetzt, da Sie kein dazwischenliegendes Wait() oder Code haben, um das Bild aufzunehmen oder das Bild in einem neuen JMP-Fenster anzuzeigen. Wenn Sie Rs plot() ausführen, erhalten Sie ein R-Fenster, kein JMP-Fenster. Wenn Sie also den zweiten Plot-Befehl ausführen, überschreibt dieser den ersten Plot. In dem von Ihnen referenzierten Link finden Sie den Abschnitt zu R Get Graphics().
Versuchen Sie etwas wie
...
R Submit("print(plot1)");
New Window("Plot 1", Picture Box( R Get Graphics(png) ) );
R Submit("print(plot2)");
New Window("Plot 2", Picture Box( R Get Graphics(png) ) );
...
Haben Sie sich die Beispiele im Skriptindex von JMP angesehen, der sich im Hilfemenü befindet? Das folgende Skript stammt aus dem Skriptindex „R Get Graphics“.
Names Default To Here( 1 );
R Init();
R Submit( "plot(1:10)" );
plot = R Get Graphics( png );
New Window( "Plot", Picture Box( plot ) );
R Term();
Betreff: R-Plot durch JSL/JMPHallo Paul, danke für deine Antwort. Ich versuche, den gleichen Vorgang nur für Python statt für R zu wiederholen.
Und die JSL lädt weiterhin das zuletzt definierte Diagramm aus Python, anstatt die richtige Abbildung zu zeichnen.
Das plt.show(plt.figure(plot1)) funktioniert in Python, aber wenn ich den folgenden Code in JSL verwende:
plot1 = Bildbox (Python Get Graphics("png", "plt.show(plt.figure(plot1)"));
Dann übernimmt JSL weiterhin das zuletzt definierte Diagramm.
Haben Sie einen Vorschlag, was ich falsch gemacht habe?
Betreff: R-Plot durch JSL/JMPZunächst aus der Dokumentation im Scripting Index, Syntax: image = Python Get Graphics(format);
Es gibt keinen zweiten Parameter. Die Indexbeschreibung des Skripts lautet: Gibt das letzte Grafikobjekt zurück, das in das Python-Grafikanzeigefenster geschrieben wurde, und zwar in einem Grafikformat, das durch den Formatparameter angegeben wird.
Zweitens müssen Sie JMP vor JMP 18 verwenden.
Python Get Graphics(png); wurde in 18 veraltet und bereits aus den Entwicklungs -Builds von JMP 19 entfernt. In JMP 18 gibt es keinen Wert zurück, sondern löst stattdessen einen Warndialog aus. Die geeignete Methode, die in allen Versionen von JMP funktioniert, besteht darin, den Python-Code das Bild in einer Datei speichern zu lassen . Öffnen Sie dann die Datei und übergeben Sie sie an eine JSL Picture Box(). Der Skriptindex von JMP 18 für Python Get Graphics() bietet ein vollständiges Beispiel für die Problemumgehung.
Anstatt ein plt.show() auszuführen
Sie sollten Folgendes tun:
# save image to location of your choosing
plt.savefig( jmp.TEMP + 'get_graphics_img.png') # JMP 18+
# or ... savefig( '/tmp/get_graphics_img.png') before JMP 18 (macOS).
Dann von JSL: oder über jmp.run_jsl(''' ... '''') von Python
// plot = Python Get Graphics( png ); // DEPRECATED
pngJMP = New Window( "Plot", Picture Box( Open( "$TEMP/get_graphics_img.png", png ) ) );
Python Submit( "plt.close()" );
rc = Delete File( "$TEMP/get_graphics_img.png" );
Es gibt noch ein weiteres Problem. Insbesondere auf dem Mac kämpfen Matplotlib und JMP um die Kontrolle über die Fensterereignisschleife, wenn Matplotlib interaktiv aufgerufen wird. Sie können JMP beenden, indem Sie das letzte auf dem Bildschirm sichtbare Matplotlib-Fenster schließen. Dies hängt vom Matplotlib-Backend ab, ist aber unter macOS besonders heikel.