added driver for xmgrace files
This commit is contained in:
		
							
								
								
									
										105
									
								
								gracedriver.py
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								gracedriver.py
									
									
									
									
									
								
							@@ -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
 | 
				
			||||||
    pass
 | 
					        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 ):
 | 
					        self.cmds.append('S%i SYMBOL FILL PATTERN 1\n'%(self.data_counter))
 | 
				
			||||||
    pass
 | 
					        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( ):
 | 
					    def xlabel(self,  label ):
 | 
				
			||||||
    pass
 | 
					        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