Versión: JMP 18.0.1
He incluido 2 scripts de Python a continuación. Ambos tienen la creación de una figura envuelta dentro de una función y guardada como imagen. Si llamo al archivo de imagen directamente usando Python Get (), puedo usar jmp.run_jsl para abrir una ventana con el gráfico. Sin embargo, si hago lo mismo pero envuelvo jmp.run_jsl dentro de una función main() por alguna razón, Python Get() no funciona y no puedo pasar la cadena para la ubicación del archivo a la nueva ventana de imagen. Cualquier ayuda sería muy apreciada.
¡Hola!
Supongo que tiene que ver con ámbitos variables. En testcode_v1.txt la variable de trazado se define dentro de la función main() mientras que en testcode_v2.txt la variable de trazado se define fuera de cualquier ámbito limitante, lo que la hace global. Aparentemente, a pesar de ejecutar el script JSL dentro de algún ámbito interno, no significa que tenga acceso a las variables definidas en ese ámbito en particular.
La solución mínima para esto es definir la variable de trazado como global. Vea las partes resaltadas en rojo.
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()