source: trunk/python/plotter2.py @ 2909

Last change on this file since 2909 was 2909, checked in by WataruKawasaki, 10 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes

Interface Changes: No

What Interface Changed:

Test Programs:

Put in Release Notes:

Module(s): sd

Description: (1) a bug fix in sd.scantable.parse_spw_selection(). modified to get rest frequency value correctly based on molecule ID stored for each spw (the first spectrum having the specified spw in scantable). (2) renamed 'annotation' to 'text' in class or variable names for sd.plotter2.


File size: 34.7 KB
Line 
1from os.path import expanduser, expandvars
2from asap._asap import Plotter2
3
4class plotter2:
5    def __init__(self):
6        self._plotter = Plotter2()
7        self.current_vs_unit = 'cm'
8
9    def set_output(self, filename=None, dev=None):
10        """\
11        set output filename and/or output device.
12        when only filename given, filename is splitted with '.' then
13        the last part (filename extension) will be used as output device.
14        Parameters:
15            filename: output file name (default is '')
16            device:   output device. default is 'xwindow'. 'png', 'ps'
17                      and 'vps'(PostScript in portrait shape) are
18                      available also.
19
20        Example:
21            set_output()                -- display in X Window (default)
22            set_output('foo.png')       -- generate foo.png in PNG format.
23            set_output('bar.ps', 'vps') -- generate bar.ps in portrait shape.
24        """
25        if filename is None:
26            filename = ''
27            dev = 'xwindow'
28        else:
29            filename = filename.strip()
30            if filename == '':
31                dev = 'xwindow'
32            else:
33                if (dev is None) or (dev.strip() == ''):
34                    fnamelem = filename.lower().split('.')
35                    dev = fnamelem[len(fnamelem)-1].strip()
36                    if dev == 'ps': dev = 'cps'
37
38        self._plotter.set_filename(expanduser(expandvars(filename)))
39        self._plotter.set_device(dev.strip())
40        self.device = dev.strip()
41
42    def get_vs(self):
43        """\
44        returns size and shape information on 'view surface' (a word used
45        in PGPLOT, meaning the entire region of plotting) as a dictionary.
46        """
47        width = self._plotter.get_viewsurface_width()
48        unit = self.current_vs_unit
49        if unit == 'cm':
50            width = width * 2.54 # inch to centimeter
51        elif unit == 'mm':
52            width = width * 25.4 # inch to millimeter
53        elif unit == 'pixel':
54            width = width * 85.0 + 1.0 # inch to pixel (plus correction for 1pixel)
55
56        aspect = self._plotter.get_viewsurface_aspect()
57
58        return {'width': width, 'unit': unit, 'aspect': aspect}
59
60    def set_vs(self, width=None, unit=None, aspect=None):
61        """\
62        set size and shape of 'view surface', namely, the entire region
63        of plotting including graphic window or output file. ('view
64        surface' is a word used in PGPLOT)
65        Parameters:
66            width:  width of graphic window or output file.
67            unit:   unit of width. default value is 'cm'. 'mm', 'inch'
68                    and 'pixel' are also available.
69            aspect: aspect ratio (= height / width).
70       
71        Example:
72            set_vs(width=10, unit='cm', aspect=1.0) -- set the output
73                window/file as a square 10cm on a side.
74            set_vs(width=400, unit='pixel', aspect=0.75) -- set the output
75                window/file as a rectangle with 400 pixels in width and
76                300 pixels in height.
77
78        Note:
79            setting unit to 'cm', 'mm' or 'inch' results in output with the
80            correct size when output device is X Window or PostScript, but
81            not for the other cases (png). also, setting unit to 'pixel'
82            works correctly only when output device is 'png': this arises
83            from PGPLOT's assumption on device resolution of 85 pixel/inch,
84            though actual resolution will vary depending on device type.
85            thus, for output with a correct size specified, users are
86            recommended to use 'pixel' for 'png' output, and other units
87            for 'xwindow' (the default) or PostScript output.
88        """
89        if width is None:
90            width = self._plotter.get_viewsurface_width() # inch
91            if self.current_vs_unit == 'cm':
92                width = width * 2.54 # inch to centimeter
93            elif self.current_vs_unit == 'mm':
94                width = width * 25.4 # inch to millimeter
95            elif self.current_vs_unit == 'pixel':
96                width = width * 85.0 + 1.0 # inch to pixel (plus correction for 1pixel)
97        if unit is None: unit = self.current_vs_unit
98        if aspect is None: aspect = self._plotter.get_viewsurface_aspect()
99       
100        if not ((isinstance(width, int) or isinstance(width, float)) and (width > 0)):
101            raise ValueError("Width must be positive float or integer.")
102        if not (isinstance(aspect, int) or isinstance(aspect, float)):
103            raise ValueError("Aspect must be positive float or integer.")
104
105        unit = unit.lower().strip()
106        if unit == 'cm':
107            width = width / 2.54 # centimeter to inch
108        elif unit == 'mm':
109            width = width / 25.4 # millimeter to inch
110        elif unit == 'pixel':
111            width = (width - 1.0) / 85.0 # pixel to inch (plus correction for 1pixel)
112        elif unit != 'inch':
113            raise ValueError("Unit must be 'cm', 'mm', 'inch' or 'pixel'.")
114        self.current_vs_unit = unit
115
116        self._plotter.set_viewsurface(width, aspect)
117       
118    def set_vp(self, xmin, xmax, ymin, ymax, id=None):
119        """\
120        change the position/shape of viewport in which data are to be plotted.
121        positions should be given in window coordinate (0<={x,y}<=1), but,
122        unlike the usual definition of window coordinates, with the origin at
123        the bottom left corner.
124        when you create plotter2 instance, it already has a single viewport
125        with xmin=ymin=0.1 and xmax=ymax=0.9 (id=0). in case you don't want to
126        change the size/position of the viewport, you never need to run this
127        function.
128        if you want to have two or more viewports, run set_vp() first to
129        move/resize the first viewport, then you will be able to add a new
130        viewport by executing set_vp without id (the id of the new viewport
131        is returned in this case). the location and shape of any viewport
132        can be modified later by specifying its viewport id.
133
134        Parameters:
135            xmin: the x position of the left side.
136            xmax: the x position of the rightt side.
137            ymin: the y position of the top of viewport.
138            ymax: the y position of the bottom of viewport.
139            id:   viewport id
140        """
141        if id is None:
142            if self._plotter.get_hasdefaultvp():
143                self._plotter.set_viewport(xmin, xmax, ymin, ymax, 0)
144            else:
145                return self._plotter.add_viewport(xmin, xmax, ymin, ymax)
146        else:
147            self._plotter.set_viewport(xmin, xmax, ymin, ymax, id)
148
149    def show_vp(self, vpid=None):
150        """\
151        show viewport specified with its id.
152
153        Parameter:
154            vpid: viewport id. when unset, operation is applied to
155                  the viewport with the largest id.
156        """
157        if vpid is None: vpid = -1
158        self._plotter.show_viewport(vpid)
159   
160    def hide_vp(self, vpid=None):
161        """\
162        hide viewport specified with its id.
163
164        Parameter:
165            vpid: viewport id. when unset, operation is applied to
166                  the viewport with the largest id.
167        """
168        if vpid is None: vpid = -1
169        self._plotter.hide_viewport(vpid)
170   
171    def set_range(self, xmin, xmax, ymin, ymax, vpid=None):
172        """\
173        set 2D range to be displayed in the specified viewport.
174        by default, the display range is set automatically.
175
176        Parameter:
177            xmin: the minimum of x range.
178            xmax: the maximum of x range.
179            ymin: the minimum of y range.
180            ymax: the maximum of y range.
181            vpid: viewport id. when unset, operation is applied to
182                  the viewport with the largest id.
183        """
184        if vpid is None: vpid = -1
185        self._plotter.set_range(xmin, xmax, ymin, ymax, vpid)
186       
187    def set_xrange(self, xmin, xmax, vpid=None):
188        """\
189        set x range to be displayed in the specified viewport.
190        by default, the display range is set automatically.
191
192        Parameter:
193            xmin: the minimum of x range.
194            xmax: the maximum of x range.
195            vpid: viewport id. when unset, operation is applied to
196                  the viewport with the largest id.
197        """
198        if vpid is None: vpid = -1
199        self._plotter.set_range_x(xmin, xmax, vpid)
200   
201    def set_yrange(self, ymin, ymax, vpid=None):
202        """\
203        set y range to be displayed in the specified viewport.
204        by default, the display range is set automatically.
205
206        Parameter:
207            ymin: the minimum of y range.
208            ymax: the maximum of y range.
209            vpid: viewport id. when unset, operation is applied to
210                  the viewport with the largest id.
211        """
212        if vpid is None: vpid = -1
213        self._plotter.set_range_y(ymin, ymax, vpid)
214
215    def get_xrange(self, vpid=None):
216        """\
217        returns x range of displayed region of the specified viewport
218        as a list of [xmin, xmax].
219
220        Parameter:
221            vpid: viewport id. when unset, operation is applied to
222                  the viewport with the largest id.
223        """
224        if vpid is None: vpid = -1
225        return self._plotter.get_range_x(vpid)
226   
227    def get_yrange(self, vpid=None):
228        """\
229        returns y range of displayed region in the specified viewport
230        as a list of [ymin, ymax].
231
232        Parameter:
233            vpid: viewport id. when unset, operation is applied to
234                  the viewport with the largest id.
235        """
236        if vpid is None: vpid = -1
237        return self._plotter.get_range_y(vpid)
238   
239    def set_autorange(self, vpid=None):
240        """\
241        set the 2-Dimensional range of displayed area of the specified
242        viewport to automatically enclose the given data.
243        the x range will be from the minimum up to the maximum value
244        of the given x values, whereas y range has margins of 10% of
245        the y value range both at the top and the bottom sides.
246
247        Parameter:
248            vpid: viewport id. when unset, operation is applied to
249                  the viewport with the largest id.
250        """
251        if vpid is None: vpid = -1
252        self._plotter.set_autorange(vpid)
253
254    def set_xautorange(self, vpid=None):
255        """\
256        set x range of displayed area of the specified viewport to
257        automatically enclose the given data with no margins.
258
259        Parameter:
260            vpid: viewport id. when unset, operation is applied to
261                  the viewport with the largest id.
262        """
263        if vpid is None: vpid = -1
264        self._plotter.set_autorange_x(vpid)
265   
266    def set_yautorange(self, vpid=None):
267        """\
268        set y range of displayed area of the specified viewport to
269        automatically enclose the given data with margins of 10% of
270        the y value range both at the top and the bottom sides.
271
272        Parameter:
273            vpid: viewport id. when unset, operation is applied to
274                  the viewport with the largest id.
275        """
276        if vpid is None: vpid = -1
277        self._plotter.set_autorange_y(vpid)
278
279    def set_fontsize(self, size, vpid=None):
280        """\
281        set the font size that is used for number labels etc.
282
283        Parameter:
284            size: font size (default is 1)
285            vpid: viewport id. when unset, operation is applied to
286                  the viewport with the largest id.
287        """
288        if vpid is None: vpid = -1
289        self._plotter.set_fontsize(size, vpid)
290   
291    def set_xtics(self, interval_major, num_minor=None, vpid=None):
292        """\
293        set the interval of ticks along x axis.
294
295        Parameter:
296            interval_major: interval of major ticks
297            num_minor:      major tick interval / minor tick interval.
298                            default is 5.
299            vpid:           viewport id. when unset, operation is
300                            applied to the viewport with the largest id.
301        """
302        if vpid is None: vpid = -1
303        if num_minor is None: num_minor = 5
304        self._plotter.set_tics_x(interval_major, num_minor, vpid)
305   
306    def set_ytics(self, interval_major, num_minor=None, vpid=None):
307        """\
308        set the interval of ticks along y axis.
309
310        Parameter:
311            interval_major: interval of major ticks
312            num_minor:      major tick interval / minor tick interval.
313                            default is 5.
314            vpid:           viewport id. when unset, operation is
315                            applied to the viewport with the largest id.
316        """
317        if vpid is None: vpid = -1
318        if num_minor is None: num_minor = 5
319        self._plotter.set_tics_y(interval_major, num_minor, vpid)
320   
321    def set_xautotics(self, vpid=None):
322        """\
323        set the interval of ticks and number labels along x axis
324        given automatically.
325       
326        Parameter:
327            vpid: viewport id. when unset, operation is applied to
328                  the viewport with the largest id.
329        """
330        if vpid is None: vpid = -1
331        self._plotter.set_autotics_x(vpid)
332   
333    def set_yautotics(self, vpid=None):
334        """\
335        set the interval of ticks and number labels along y axis
336        given automatically.
337       
338        Parameter:
339            vpid: viewport id. when unset, operation is applied to
340                  the viewport with the largest id.
341        """
342        if vpid is None: vpid = -1
343        self._plotter.set_autotics_y(vpid)
344   
345    def set_xnuminterval(self, interval, vpid=None):
346        """\
347        set the interval of number labels along x axis.
348
349        Parameter:
350            interval: interval of number labels
351            vpid:     viewport id. when unset, operation is
352                      applied to the viewport with the largest id.
353        """
354        if vpid is None: vpid = -1
355        self._plotter.set_ninterval_x(interval, vpid)
356   
357    def set_ynuminterval(self, interval, vpid=None):
358        """\
359        set the interval of number labels along y axis.
360
361        Parameter:
362            interval: interval of number labels
363            vpid:     viewport id. when unset, operation is
364                      applied to the viewport with the largest id.
365        """
366        if vpid is None: vpid = -1
367        self._plotter.set_ninterval_y(interval, vpid)
368
369    def set_xnumlocation(self, location=None, vpid=None):
370        """\
371        set the location of number labels along x axis.
372
373        Parameters:
374            location: 'l' (left side) or 'r' (right side). default is 'l'.
375            vpid:     viewport id. when unset, operation is
376                      applied to the viewport with the largest id.
377        """
378        if vpid     is None: vpid     = -1
379        if location is None: location = "l"
380        self._plotter.set_nlocation_x(location.lower(), vpid)
381   
382    def set_ynumlocation(self, location=None, vpid=None):
383        """\
384        set the location of number labels along y axis.
385
386        Parameters:
387            location: 'b' (bottom) or 't' (top). default is 'b'.
388            vpid:     viewport id. when unset, operation is
389                      applied to the viewport with the largest id.
390        """
391        if vpid     is None: vpid     = -1
392        if location is None: location = "b"
393        self._plotter.set_nlocation_y(location.lower(), vpid)
394   
395    def set_data(self, xdata, ydata, vpid=None, dataid=None):
396        """\
397        append or change dataset to be plotted.
398
399        Parameters:
400            xdata:  a list of x positions of the input data.
401            ydata:  a list of y positions of the input data.
402            vpid:   viewport id. when not given, the last viewport
403                    will be the target.
404            dataid: dataset id. a integer starting from 0. when dataid
405                    is given, the corresponding dataset of the specified
406                    viewport is replaced by the given xdata and ydata.
407                    when not given, a new dataset of xdata and ydata is
408                    appended.
409        """
410        if dataid is None:
411            if vpid is None: vpid = -1
412            dataid = -1
413       
414        self._plotter.set_data(xdata, ydata, vpid, dataid)
415
416    def set_line(self, color, width=None, style=None, vpid=None, dataid=None):
417        """\
418        change line attributes.
419
420        Parameters:
421            color:  line color specified by color name. available colors
422                    can be listed via list_colornames().
423            width:  line width. default is 1.
424            style:  line style. available styles can be listed via
425                    list_linestyles().
426            vpid:   viewport id. when not given, the last viewport
427                    will be the target of operation.
428            dataid: dataset id. when not given, the last dataset for the
429                    specified viewport is the target.
430        """
431        if width  is None: width  = 1
432        if style  is None: style  = "solid"
433        if vpid   is None: vpid   = -1
434        if dataid is None: dataid = -1
435       
436        coloridx = self.get_colorindex(color)
437        styleidx = self.get_linestyleindex(style)
438        self._plotter.set_line(coloridx, width, styleidx, vpid, dataid)
439
440    def show_line(self, vpid=None, dataid=None):
441        """\
442        show line connecting the specified dataset.
443
444        Parameters:
445            vpid:   viewport id. when not given, the last viewport
446                    will be the target.
447            dataid: dataset id. when not given, the last dataset used.
448        """
449        if dataid is None:
450            if vpid is None: vpid = -1
451            dataid = -1
452
453        self._plotter.show_line(vpid, dataid)
454   
455    def hide_line(self, vpid=None, dataid=None):
456        """\
457        hide line connecting the specified dataset.
458
459        Parameters:
460            vpid:   viewport id. when not given, the last viewport
461                    will be the target.
462            dataid: dataset id. when not given, the last dataset used.
463        """
464        if dataid is None:
465            if vpid is None: vpid = -1
466            dataid = -1
467
468        self._plotter.hide_line(vpid, dataid)
469   
470    def set_point(self, type, size, color, vpid=None, dataid=None):
471        """\
472        change marker attributes for the specified dataset.
473
474        Parameters:
475            type:   type of marker symbol. see PGPLOT manual for detail.
476            size:   marker size.
477            color:  color of marker. see output of list_colornames().
478            vpid:   viewport id. when not given, the last viewport
479                    will be the target.
480            dataid: dataset id. when not given, the last dataset used.
481        """
482        if dataid is None:
483            if vpid is None: vpid = -1
484            dataid = -1
485        coloridx = self.get_colorindex(color)
486        self._plotter.set_point(type, size, coloridx, vpid, dataid)
487
488    def show_point(self, vpid=None, dataid=None):
489        """\
490        show markers for the specified dataset.
491
492        Parameters:
493            vpid:   viewport id. when not given, the last viewport
494                    will be the target.
495            dataid: dataset id. when not given, the last dataset used.
496        """
497        if dataid is None:
498            if vpid is None: vpid = -1
499            dataid = -1
500       
501        self._plotter.show_point(vpid, dataid)
502
503    def hide_point(self, vpid=None, dataid=None):
504        """\
505        hide markers for the specified dataset.
506
507        Parameters:
508            vpid:   viewport id. when not given, the last viewport
509                    will be the target.
510            dataid: dataset id. when not given, the last dataset used.
511        """
512        if dataid is None:
513            if vpid is None: vpid = -1
514            dataid = -1
515       
516        self._plotter.hide_point(vpid, dataid)
517
518    def set_xmask(self, xmin, xmax, color=None, fstyle=None, width=None, hsep=None, vpid=None):
519        """\
520        add a rectangle which spans the full y range.
521
522        Parameters:
523            xmin:   the smaller end of mask region
524            xmax:   the larger end of mask region
525            color:  color of mask region. see output of list_colornames().
526                    default is "lightgray".
527            fstyle: fill style. see output of list_fillstyles().
528                    default is "solid".
529            width:  width of outline of mask region. default is 1.
530            hsep:   spacing of hatched lines. default is 1.0
531            vpid:   viewport id. when not given, the last viewport
532                    will be the target.
533        """
534        if color  is None: color  = "lightgray"
535        if fstyle is None: fstyle = "solid"
536        if width  is None: width  = 1
537        if hsep   is None: hsep   = 1.0
538        if vpid   is None: vpid   = -1
539       
540        coloridx = self.get_colorindex(color)
541        fstyleidx = self.get_fillstyleindex(fstyle)
542       
543        self._plotter.set_mask_x(xmin, xmax, coloridx, fstyleidx, width, hsep, vpid)
544
545    def set_arrow(self, xtail, xhead, ytail, yhead, color=None, width=None, linestyle=None, headsize=None, headfs=None, headangle=None, headvent=None, vpid=None, arrowid=None):
546        """\
547        draw an arrow or change existing arrow attributes.
548
549        Parameters:
550            xtail:     x position of arrow tail
551            xhead:     x position of arrow head
552            ytail:     y position of arrow tail
553            yhead:     y position of arrow head
554            color:     color of arrow. see output of list_colornames().
555                       default is "black".
556            width:     width of arrow line and outline of arrow head.
557                       default is 1.
558            linestyle: line style. available styles can be listed via
559                       list_linestyles().
560            headsize:  size of arrow head. default is 1.0.
561            headfs:    fill style of arrow head. see output of
562                       list_arrowheadfillstyles(). default is "solid".
563            headangle: acute angle of arrow head in unit of degree.
564                       default is 45.0.
565            headvent:  fraction of the triangular arrow-head that is
566                       cut away from the back. 0.0 gives a triangular
567                       wedge arrow head while 1.0 gives an open
568                       '>'-shaped one. default is 0.3.
569            vpid:      viewport id. when not given, the last viewport
570                       will be the target.
571            arrowid:   arrow id. when not given, the arrow having the
572                       final arrow id for the specified viewport will
573                       be the target.
574        """
575        if color     is None: color     = "black"
576        if width     is None: width     = 1
577        if linestyle is None: linestyle = "solid"
578        if headsize  is None: headsize  = 1.0
579        if headfs    is None: headfs    = "solid"
580        if headangle is None: headangle = 45.0
581        if headvent  is None: headvent  = 0.3
582        if vpid      is None: vpid      = -1
583        if arrowid   is None: arrowid   = -1
584       
585        coloridx = self.get_colorindex(color)
586        linestyleidx = self.get_linestyleindex(linestyle)
587        headfsidx = self.get_arrowheadfillstyleindex(headfs)
588       
589        self._plotter.set_arrow(xtail, xhead, ytail, yhead, coloridx, width, linestyleidx, headsize, headfsidx, headangle, headvent, vpid, arrowid)
590
591    def set_text(self, text, posx=None, posy=None, angle=None, fjust=None, size=None, style=None, color=None, bgcolor=None, vpid=None, textid=None):
592        """\
593        write text string or change existing text attributes.
594       
595        Parameters:
596            text:    text string.
597            posx:    x position of text in world coordinate.
598                     default is center of x axis.
599            posy:    y position of text in world coordinate.
600                     default is center of y axis.
601            angle:   rotation angle of text in unit of degree.
602                     0.0 (default) is horizontal.
603            fjust:   horizontal justification of text string. if 0.0
604                     (default) is given, the text is left-justified at
605                     (posx, posy). if 0.5, the text is centered, and if
606                     1.0, the text is right-justified.
607            size:    size of text string. the default is 1.0.
608            style:   font style. "normal", "roman", "italic" and "script"
609                     are available. default is "normal".
610            color:   color of text. see output of list_colornames().
611                     default is "black".
612            bgcolor: background color of text. see output of
613                     list_colornames(). default is transparent(-1).
614            vpid:    viewport id. when not given, the last viewport will
615                     be the target.
616            textid:  text id independently defined for each viewport.
617                     when not given, the text having the final text id
618                     for the specified viewport will be the target.
619        """
620        if posx    is None: posx    = -1.0
621        if posy    is None: posy    = -1.0
622        if angle   is None: angle   = 0.0
623        if fjust   is None: fjust   = 0.0
624        if size    is None: size    = 1.0
625        if style   is None: style   = ""
626        if color   is None: color   = "black"
627        if bgcolor is None: bgcolor = "" # transparent
628        if vpid    is None: vpid    = -1
629        if textid  is None: textid  = -1
630       
631        coloridx = self.get_colorindex(color)
632        bgcoloridx = self.get_colorindex(bgcolor) if (bgcolor.strip() != "") else -1 #bgcolor
633       
634        self._plotter.set_text(text, posx, posy, angle, fjust, size, style, coloridx, bgcoloridx, vpid, textid)
635
636    def set_xlabel(self, label, style=None, size=None, posx=None, posy=None, vpid=None):
637        """\
638        set label string along x axis. when the position of label is
639        specified explicitly by posx and posy, the label appears so
640        that its center placed on the specified position.
641
642        Parameters:
643            label: label string.
644            style: font style. "normal", "roman", "italic" and "script"
645                   are available. default is "normal".
646            size:  font size. default is 1.1 (10% larger than that
647                   of number labels)
648            posx:  x position of label string in window coordinate.
649                   default is the center of x axis.
650            posy:  y position of label string in window coordinate.
651            vpid:  viewport id. when not given, the last viewport
652                   will be the target.
653        """
654        if style is None: style = ""
655        if size  is None: size  = 1.1
656        if posx  is None: posx  = -1.0
657        if posy  is None: posy  = -1.0
658        if vpid  is None: vpid  = -1
659       
660        self._plotter.set_label_x(label, posx, posy, size, style, 1, 0, vpid)
661   
662    def set_ylabel(self, label, style=None, size=None, posx=None, posy=None, vpid=None):
663        """\
664        set label string along y axis. when the position of label is
665        specified explicitly by posx and posy, the label appears so
666        that its center placed on the specified position.
667
668        Parameters:
669            label: label string.
670            style: font style. "normal", "roman", "italic" and "script"
671                   are available. default is "normal".
672            size:  font size. default is 1.1 (10% larger than that
673                   of number labels)
674            posx:  x position of label string in window coordinate.
675            posy:  y position of label string in window coordinate.
676                   default is the center of y axis.
677            vpid:   viewport id. when not given, the last viewport
678                    will be the target.
679        """
680        if style is None: style = ""
681        if size  is None: size  = 1.1
682        if posx  is None: posx  = -1.0
683        if posy  is None: posy  = -1.0
684        if vpid  is None: vpid  = -1
685       
686        self._plotter.set_label_y(label, posx, posy, size, style, 1, 0, vpid)
687   
688    def set_title(self, title, style=None, size=None, posx=None, posy=None, vpid=None):
689        """\
690        set title string over the top of the specified viewport.
691        when the position of title is specified explicitly by posx
692        and posy, the title appears so that its center placed on
693        the specified position.
694
695        Parameters:
696            title: title string.
697            style: font style. "normal", "roman", "italic" and "script"
698                   are available. default is "normal".
699            size:  font size. default is 1.5 (50% larger than that
700                   of number titles)
701            posx:  x position of title string in window coordinate.
702            posy:  y position of title string.
703                   default is the center of y axis.
704            vpid:   viewport id. when not given, the last viewport
705                    will be the target.
706        """
707        if style is None: style = ""
708        if size  is None: size  = 1.5
709        if posx  is None: posx  = -1.0
710        if posy  is None: posy  = -1.0
711        if vpid  is None: vpid  = -1
712       
713        self._plotter.set_title(title, posx, posy, size, style, 1, 0, vpid)
714
715    def set_vpbgcolor(self, bgcolor, vpid=None):
716        """\
717        change the background color of the specified viewport.
718        default is transparent.
719
720        Parameters:
721            bgcolor: background color. see output of list_colornames().
722                     default is "" (transparent).
723            vpid:    viewport id. when not given, the last viewport
724                     will be the target.
725        """
726        if vpid  is None: vpid  = -1
727
728        if bgcolor.strip() == "":
729            coloridx = -1
730        else:
731            coloridx = self.get_colorindex(bgcolor)
732       
733        self._plotter.set_vpbgcolor(coloridx, vpid)
734   
735    def plot(self):
736        """\
737        execute actual plotting.
738        """
739        self._plotter.plot()
740
741    def save(self, filename):
742        """\
743        save the figure in a file with specified name.
744        the filename and device previously set by set_output() is
745        not affected by this command.
746
747        Parameters:
748            filename: output file name.
749        """
750        prev_filename = self._plotter.get_filename()
751        prev_dev      = self._plotter.get_device()
752
753        self.set_output(filename)
754        self.plot()
755       
756        self.set_output(prev_filename, prev_dev)
757   
758    def get_vinfo(self):
759        self._plotter.get_vinfo()
760
761    @classmethod
762    def get_colorindex(cls, colorname):
763        """\
764        convert the given color name into color index used in PGPLOT.
765        """
766        name = colorname.strip().lower()
767        available_color = True
768
769        if   name == "white":       idx =  0  # our definition of bgcolor
770        elif name == "black":       idx =  1  # our definition of fgcolor
771        elif name == "red":         idx =  2
772        elif name == "green":       idx =  3
773        elif name == "blue":        idx =  4
774        elif name == "cyan":        idx =  5
775        elif name == "magenta":     idx =  6
776        elif name == "yellow":      idx =  7
777        elif name == "orange":      idx =  8
778        elif name == "yellowgreen": idx =  9
779        elif name == "emerald":     idx = 10
780        elif name == "skyblue":     idx = 11
781        elif name == "purple":      idx = 12
782        elif name == "pink":        idx = 13
783        elif name == "gray":        idx = 14
784        elif name == "lightgray":   idx = 15
785        else: available_color = False
786
787        if (available_color):
788            return idx
789        else:
790            raise ValueError("Unavailable colour name.")
791
792    @classmethod
793    def list_colornames(cls):
794        """\
795        list the available color names.
796        """
797        print "plotter2: default color list ----"
798        print "  (0) white (background)"
799        print "  (1) black (foreground)"
800        print "  (2) red"
801        print "  (3) green"
802        print "  (4) blue"
803        print "  (5) cyan"
804        print "  (6) magenta"
805        print "  (7) yellow"
806        print "  (8) orange"
807        print "  (9) yellowgreen"
808        print " (10) emerald"
809        print " (11) skyblue"
810        print " (12) purple"
811        print " (13) pink"
812        print " (14) gray"
813        print " (15) lightgray"
814        print "---------------------------------"
815
816    @classmethod
817    def get_linestyleindex(cls, fstyle):
818        """\
819        convert the given line style into style index used in PGPLOT.
820        """
821        style = fstyle.strip().lower()
822        available_style = True
823       
824        if   style == "solid":               idx = 1
825        elif style == "dashed":              idx = 2
826        elif style == "dash-dotted":         idx = 3
827        elif style == "dotted":              idx = 4
828        elif style == "dash-dot-dot-dotted": idx = 5
829        else: available_style = False
830
831        if (available_style):
832            return idx
833        else:
834            raise ValueError("Unavailable line style.")
835   
836    @classmethod
837    def list_linestyles(cls):
838        """\
839        list the available line styles.
840        """
841        print "plotter2: fill style list ----"
842        print "  (1) solid"
843        print "  (2) dashed"
844        print "  (3) dash-dotted"
845        print "  (4) dotted"
846        print "  (5) dash-dot-dot-dotted"
847        print "------------------------------"
848
849    @classmethod
850    def get_fillstyleindex(cls, fstyle):
851        """\
852        convert the given fill style into style index used in PGPLOT.
853        """
854        style = fstyle.strip().lower()
855        available_style = True
856       
857        if   style == "solid":        idx = 1
858        elif style == "outline":      idx = 2
859        elif style == "hatched":      idx = 3
860        elif style == "crosshatched": idx = 4
861        else: available_style = False
862
863        if (available_style):
864            return idx
865        else:
866            raise ValueError("Unavailable fill style.")
867   
868    @classmethod
869    def list_fillstyles(cls):
870        """\
871        list the available fill styles.
872        """
873        print "plotter2: fill style list ----"
874        print "  (1) solid"
875        print "  (2) outline"
876        print "  (3) hatched"
877        print "  (4) crosshatched"
878        print "------------------------------"
879
880    @classmethod
881    def get_arrowheadfillstyleindex(cls, fstyle):
882        """\
883        convert the given arrowhead fill style into style index used in PGPLOT.
884        """
885        style = fstyle.strip().lower()
886        available_style = True
887       
888        if   style == "solid":   idx = 1
889        elif style == "outline": idx = 2
890        else: available_style = False
891
892        if (available_style):
893            return idx
894        else:
895            raise ValueError("Unavailable fill style for arrow head.")
896
897    @classmethod
898    def list_arrowheadfillstyles(cls):
899        """\
900        list the available fill styles for arrow head.
901        """
902        print "plotter2: arrow head fill style list ----"
903        print "  (1) solid"
904        print "  (2) outline"
905        print "-----------------------------------------"
906
Note: See TracBrowser for help on using the repository browser.