Version : JMP 18.0.1
J'ai inclus 2 scripts python ci-dessous. Les deux ont la création d’une figure enveloppée dans une fonction et enregistrée sous forme d’image. Si j'appelle le fichier image directement en utilisant Python Get (), je peux utiliser jmp.run_jsl pour ouvrir une fenêtre avec le graphique. Cependant, si je fais la même chose mais que j'enveloppe le jmp.run_jsl dans une fonction main() pour une raison quelconque, Python Get() ne fonctionne pas et je ne parviens pas à transmettre la chaîne de l'emplacement du fichier dans la nouvelle fenêtre d'image. Toute aide serait grandement appréciée.
Salut!
Je suppose que cela a à voir avec des portées variables. Dans testcode_v1.txt, la variable de tracé est définie à l'intérieur de la fonction main() alors que dans testcode_v2.txt, la variable de tracé est définie en dehors de toute portée limitative, ce qui la rend globale. Apparemment, même si l'exécution d'un script JSL dans une portée interne ne signifie pas que vous avez accès aux variables définies dans cette portée particulière.
La solution de contournement minimale pour cela consiste à définir la variable de tracé comme une variable globale. Voir les parties surlignées en rouge.
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()