added driver for xmgrace files
This commit is contained in:
		
							
								
								
									
										105
									
								
								gracedriver.py
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								gracedriver.py
									
									
									
									
									
								
							| @@ -1,19 +1,108 @@ | ||||
| __author__ = 'markusro' | ||||
|  | ||||
|  | ||||
| import tempfile,os | ||||
| import numpy as np | ||||
|  | ||||
| class grace: | ||||
|     def __init__(self): | ||||
|         self.ls_map = {"None":0, "-":1, ":":2, "--":3, "-.":4 } | ||||
|  | ||||
| def plot( x, y, **kwds ): | ||||
|     pass | ||||
|         # 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)) | ||||
|  | ||||
|  | ||||
| def xlabel( label ): | ||||
|     pass | ||||
|         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 | ||||
|  | ||||
|  | ||||
| def ylabel( label ): | ||||
|     pass | ||||
|  | ||||
|         # 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 | ||||
|  | ||||
|  | ||||
| def legend( ): | ||||
|     pass | ||||
|     def xlabel(self,  label ): | ||||
|         self.cmds.append('XAXIS LABEL "%s"\n'%label) | ||||
|         pass | ||||
|  | ||||
|  | ||||
|     def ylabel(self,  label ): | ||||
|         self.cmds.append('YAXIS LABEL "%s"\n'%label) | ||||
|         pass | ||||
|  | ||||
|  | ||||
|     def legend(self, on=True): | ||||
|         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