Versione: JMP 18.0.1
Di seguito ho incluso 2 script Python. Entrambi prevedono la creazione di una figura racchiusa all'interno di una funzione e salvata come immagine. Se chiamo direttamente il file immagine utilizzando Python Get () sono in grado di utilizzare jmp.run_jsl per aprire una finestra con il grafico. Tuttavia, se faccio la stessa cosa ma avvolgo jmp.run_jsl all'interno di una funzione main() per qualche motivo, Python Get() non funziona e non sono in grado di passare la stringa per la posizione del file nella nuova finestra dell'immagine. Qualsiasi aiuto sarebbe molto apprezzato.
CIAO!
Immagino che abbia a che fare con ambiti variabili. In testcode_v1.txt la variabile di trama è definita all'interno della funzione main() mentre in testcode_v2.txt la variabile di trama è definita al di fuori di qualsiasi ambito limitante, rendendola globale. Apparentemente, nonostante l'esecuzione dello script JSL all'interno di un ambito interno non significa che hai accesso alle variabili definite in quel particolare ambito.
La soluzione alternativa minima a questo problema è definire la variabile di trama come globale. Vedi le parti evidenziate in rosso.
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()