Version: JMP 18.0.1
Ich habe unten zwei Python-Skripte eingefügt. In beiden wird eine Abbildung erstellt, die in eine Funktion eingebettet und als Bild gespeichert wird. Wenn ich die Bilddatei direkt mit Python Get() aufrufe, kann ich mit jmp.run_jsl ein Fenster mit dem Diagramm öffnen. Wenn ich jedoch dasselbe mache, aber jmp.run_jsl in eine main()-Funktion einbinde, funktioniert Python Get() aus irgendeinem Grund nicht und ich kann die Zeichenfolge für den Dateispeicherort nicht an das neue Bildfenster übergeben. Für jede Hilfe wäre ich sehr dankbar.
Hallo!
Ich vermute, es hat mit variablen Gültigkeitsbereichen zu tun. In testcode_v1.txt ist die Plotvariable innerhalb der Funktion main() definiert, während in testcode_v2.txt die Plotvariable außerhalb aller einschränkenden Gültigkeitsbereiche definiert ist, was sie global macht. Offensichtlich bedeutet die Ausführung eines JSL-Skripts innerhalb eines inneren Gültigkeitsbereichs nicht, dass Sie Zugriff auf die in diesem bestimmten Gültigkeitsbereich definierten Variablen haben.
Die mit minimalem Aufwand zu lösende Problemumgehung hierfür besteht darin, die Plotvariable als global zu definieren. Siehe die rot hervorgehobenen Teile.
import matplotlib.pyplot as plt
import jmp
plot = None
def show_plot():
fig, ax = plt.subplots()
fruits = ['apple', 'blueberry', 'cherry', 'orange']
counts = [40, 100, 30, 55]
bar_labels = ['red', 'blue', '_red', 'orange']
bar_colors = ['tab:red', 'tab:blue', 'tab:red', 'tab:orange']
ax.bar(fruits, counts, label=bar_labels, color=bar_colors)
ax.set_ylabel('fruit supply')
ax.set_title('Fruit supply by kind and color')
ax.legend(title='Fruit color')
plot = "your_file_path.png"
plt.savefig(plot,format='png')
return plot
def main():
global plot
plot = show_plot()
print(plot)
jmp.run_jsl('''
model = Python Get (plot);
show (model);
plot_model = Open(model, png);
pngJMP = New Window( "Test Model Representation", Picture Box( plot_model ),
<< bring window to front;
);
Python Submit( "plt.close()" );
''')
if __name__ == "__main__":
main()