আমার ম্যাটপ্ল্লিটিব পরিসংখ্যানগুলি সংরক্ষণ করার জন্য আমি তুলনামূলকভাবে সহজ উপায় (এখনও কিছুটা অপ্রচলিত) খুঁজে পেয়েছি। এটি এর মতো কাজ করে:
import libscript
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
#<plot>
plt.plot(t, s)
plt.xlabel('time (s)')
plt.ylabel('voltage (mV)')
plt.title('About as simple as it gets, folks')
plt.grid(True)
plt.show()
#</plot>
save_plot(fileName='plot_01.py',obj=sys.argv[0],sel='plot',ctx=libscript.get_ctx(ctx_global=globals(),ctx_local=locals()))
save_plot
এই মত সংজ্ঞায়িত ফাংশন সহ (যুক্তি বোঝার সহজ সংস্করণ):
def save_plot(fileName='',obj=None,sel='',ctx={}):
"""
Save of matplolib plot to a stand alone python script containing all the data and configuration instructions to regenerate the interactive matplotlib figure.
Parameters
----------
fileName : [string] Path of the python script file to be created.
obj : [object] Function or python object containing the lines of code to create and configure the plot to be saved.
sel : [string] Name of the tag enclosing the lines of code to create and configure the plot to be saved.
ctx : [dict] Dictionary containing the execution context. Values for variables not defined in the lines of code for the plot will be fetched from the context.
Returns
-------
Return ``'done'`` once the plot has been saved to a python script file. This file contains all the input data and configuration to re-create the original interactive matplotlib figure.
"""
import os
import libscript
N_indent=4
src=libscript.get_src(obj=obj,sel=sel)
src=libscript.prepend_ctx(src=src,ctx=ctx,debug=False)
src='\n'.join([' '*N_indent+line for line in src.split('\n')])
if(os.path.isfile(fileName)): os.remove(fileName)
with open(fileName,'w') as f:
f.write('import sys\n')
f.write('sys.dont_write_bytecode=True\n')
f.write('def main():\n')
f.write(src+'\n')
f.write('if(__name__=="__main__"):\n')
f.write(' '*N_indent+'main()\n')
return 'done'
বা এর save_plot
মতো ফাংশনটি সংজ্ঞায়িত করা (লাইটার ফিগার ফাইলগুলি উত্পাদনের জন্য জিপ কম্প্রেশন ব্যবহার করে আরও ভাল সংস্করণ):
def save_plot(fileName='',obj=None,sel='',ctx={}):
import os
import json
import zlib
import base64
import libscript
N_indent=4
level=9#0 to 9, default: 6
src=libscript.get_src(obj=obj,sel=sel)
obj=libscript.load_obj(src=src,ctx=ctx,debug=False)
bin=base64.b64encode(zlib.compress(json.dumps(obj),level))
if(os.path.isfile(fileName)): os.remove(fileName)
with open(fileName,'w') as f:
f.write('import sys\n')
f.write('sys.dont_write_bytecode=True\n')
f.write('def main():\n')
f.write(' '*N_indent+'import base64\n')
f.write(' '*N_indent+'import zlib\n')
f.write(' '*N_indent+'import json\n')
f.write(' '*N_indent+'import libscript\n')
f.write(' '*N_indent+'bin="'+str(bin)+'"\n')
f.write(' '*N_indent+'obj=json.loads(zlib.decompress(base64.b64decode(bin)))\n')
f.write(' '*N_indent+'libscript.exec_obj(obj=obj,tempfile=False)\n')
f.write('if(__name__=="__main__"):\n')
f.write(' '*N_indent+'main()\n')
return 'done'
এটি libscript
আমার নিজের একটি মডিউল ব্যবহার করে , যা বেশিরভাগ মডিউল inspect
এবং এর উপর নির্ভর করে ast
। আগ্রহ প্রকাশ করা হলে আমি এটি গিথুবে ভাগ করে নেওয়ার চেষ্টা করতে পারি (এটির জন্য প্রথমে কিছুটা পরিষ্কার পরিচ্ছন্নতার প্রয়োজন হবে এবং আমাকে গিথুব দিয়ে শুরু করতে হবে)।
এই save_plot
ফাংশন এবং libscript
মডিউলটির পেছনের ধারণাটি হ'ল অজগর নির্দেশাবলী যা চিত্র তৈরি করে (মডিউল ব্যবহার করে inspect
) তৈরি করে , বিশ্লেষণ করে (মডিউল ব্যবহার করে ast
) সমস্ত ভেরিয়েবল, ফাংশন এবং মডিউলগুলি আমদানি করে যার উপর নির্ভর করে আমদানি নির্ভর করে, এক্সিকিউশন প্রসঙ্গটি থেকে এগুলি বের করে এবং সিরিয়ালিয়াল করে তোলে অজগর নির্দেশ হিসাবে (ভেরিয়েবলের কোডটি এর মত হবে t=[0.0,2.0,0.01]
... এবং মডিউলগুলির কোডের মতো হবে import matplotlib.pyplot as plt
...) চিত্রের নির্দেশাবলীতে প্রিপেন্ড করা হয়েছে। ফলস্বরূপ পাইথন নির্দেশাবলী পাইথন স্ক্রিপ্ট হিসাবে সংরক্ষণ করা হয় যার কার্যকরকরণটি ম্যাটপ্ল্লোটিব চিত্রটি পুনরায় তৈরি করবে।
আপনি কল্পনা করতে পারেন, এটি বেশিরভাগ (সমস্ত না থাকলে) ম্যাটপ্ল্লিটিব পরিসংখ্যানগুলির জন্য ভাল কাজ করে।