added driver for xmgrace files
This commit is contained in:
		| @@ -1,19 +1,108 @@ | |||||||
| __author__ = 'markusro' | __author__ = 'markusro' | ||||||
|  |  | ||||||
|  |  | ||||||
|  | import tempfile,os | ||||||
| import numpy as np | import numpy as np | ||||||
|  |  | ||||||
|  | class grace: | ||||||
|  |     def __init__(self): | ||||||
|  |         self.ls_map = {"None":0, "-":1, ":":2, "--":3, "-.":4 } | ||||||
|  |  | ||||||
| def plot( x, y, **kwds ): |         # Symbols: 0:None 1:Circle 2:Square 3:Diamond 4:Triangle 5:up 6:left 7:down 8:right, 9:PLus 10:X 11:Star | ||||||
|  |         self.sym_map = {"None":0, "o":1, "s":2, | ||||||
|  |                         "d":3, "D":4, "2":5, | ||||||
|  |                         "v":6, "3":6, "4":7,"1":8, | ||||||
|  |                         "+":8,"x":9,"*":10  } | ||||||
|  |         self.tmpfiles = [] | ||||||
|  |         self.cmds = [] | ||||||
|  |         self.data_counter = 0 | ||||||
|  |  | ||||||
|  |     def __del__(self): | ||||||
|  |         # take care of tmp files: | ||||||
|  |         for f in self.tmpfiles: | ||||||
|  |             os.remove(f) | ||||||
|  |  | ||||||
|  |     def plot(self,  x, y, **kwds): | ||||||
|  |         tmp_fd, tmp_name = tempfile.mkstemp() | ||||||
|  |         self.tmpfiles.append(tmp_name) | ||||||
|  |         np.savetxt(tmp_name, np.array([x, y]).T) | ||||||
|  |         #tmp_fd.close() | ||||||
|  |         self.cmds.append('READ NXY "%s"\n'%tmp_name) | ||||||
|  |         self.cmds.append('S%i SYMBOL SIZE 0.6\n'%(self.data_counter)) | ||||||
|  |         self.cmds.append('S%i SYMBOL COLOR 1\n'%(self.data_counter)) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         self.cmds.append('S%i SYMBOL FILL PATTERN 1\n'%(self.data_counter)) | ||||||
|  |         self.cmds.append('S%i SYMBOL 1\n'%(self.data_counter)) # No line | ||||||
|  |  | ||||||
|  |         #self.cmds.append('S%i LINE COLOR %i\n'%(self.data_counter, self.data_counter)) | ||||||
|  |         if "label" in kwds.keys(): | ||||||
|  |             label = kwds["label"] | ||||||
|  |             self.cmds.append('S%i LEGEND "%s"\n'%(self.data_counter, label)) | ||||||
|  |  | ||||||
|  |         if "ls" in kwds.keys(): | ||||||
|  |             ls = kwds["ls"] | ||||||
|  |             if ls in self.ls_map.keys(): | ||||||
|  |                 self.cmds.append('S%i LINE LINESTYLE %i\n'%(self.data_counter, self.ls_map[ls])) # Line | ||||||
|  |  | ||||||
|  |         if "sym" in kwds.keys(): | ||||||
|  |             sym = kwds["sym"] | ||||||
|  |             if sym in self.sym_map.keys(): | ||||||
|  |                 self.cmds.append('S%i SYMBOL %i\n'%(self.data_counter, self.sym_map[sym])) | ||||||
|  |             else: | ||||||
|  |                 print "Symbol not known: %s"%sym | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         # if "label" in kwds.keys(): | ||||||
|  |         #     label = kwds["label"] | ||||||
|  |         #     self.cmds.append('S%i LEGEND "%s"\n'%(self.data_counter, label)) | ||||||
|  |  | ||||||
|  |         self.data_counter += 1 | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|  |  | ||||||
| def xlabel( label ): |     def xlabel(self,  label ): | ||||||
|  |         self.cmds.append('XAXIS LABEL "%s"\n'%label) | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|  |  | ||||||
| def ylabel( label ): |     def ylabel(self,  label ): | ||||||
|  |         self.cmds.append('YAXIS LABEL "%s"\n'%label) | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|  |  | ||||||
| def legend( ): |     def legend(self, on=True): | ||||||
|     pass |         if on: | ||||||
|  |             self.cmds.append('LEGEND ON\n') | ||||||
|  |         else: | ||||||
|  |             self.cmds.append('LEGEND OFF\n') | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     def save(self, fname): | ||||||
|  |         self.cmds.append('SAVEALL "%s"\n'%fname) | ||||||
|  |         # write cmds to tmpfile | ||||||
|  |         tmp_fd, tmp_name = tempfile.mkstemp() | ||||||
|  |         self.tmpfiles.append(tmp_name) | ||||||
|  |         tmp_file = open(tmp_name, 'w') | ||||||
|  |         tmp_file.writelines(self.cmds) | ||||||
|  |         tmp_file.close() | ||||||
|  |         # excecute tmpfile | ||||||
|  |         os.system("xmgrace -batch %s -hardcopy -nosafe -printfile tmp.tmp"%tmp_name) | ||||||
|  |         os.remove("tmp.tmp") | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     print "Testing Grace driver" | ||||||
|  |     nums = 50 | ||||||
|  |     gr = grace() | ||||||
|  |     for i in xrange(20): | ||||||
|  |         gr.plot(np.arange(nums), np.random.random(nums), label="label %i"%i, | ||||||
|  |                 ls=gr.ls_map.keys()[i%(len(gr.ls_map))], | ||||||
|  |                 sym=gr.sym_map.keys()[i%(len(gr.sym_map))], | ||||||
|  |                 ) | ||||||
|  |     gr.xlabel(r"xlabel / \xm\sl\N\0") | ||||||
|  |     gr.ylabel(r"ylabel / \xt\sS\N\0") | ||||||
|  |     gr.save("test.agr") | ||||||
|  |     os.system("xmgrace test.agr") | ||||||
|  |     print "deleting test.agr" | ||||||
|  |     os.remove("test.agr") | ||||||
		Reference in New Issue
	
	Block a user