source: trunk/python/plotter2.py@ 2907

Last change on this file since 2907 was 2896, checked in by WataruKawasaki, 11 years ago

New Development: Yes

JIRA Issue: Yes CAS-6216/6217

Ready for Test: Yes

Interface Changes: Yes

What Interface Changed: added new methods in sd.plotter2

Test Programs:

Put in Release Notes:

Module(s): sd

Description: arrows and annotation texts become available in sd.plotter2.


File size: 33.2 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 append 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_annotation(self, label, posx=None, posy=None, angle=None, fjust=None, size=None, style=None, color=None, bgcolor=None, vpid=None, annid=None):
592 if posx is None: posx = 0.5
593 if posy is None: posy = 0.5
594 if angle is None: angle = 0.0
595 if fjust is None: fjust = 0.5
596 if size is None: size = 1.0
597 if style is None: style = ""
598 if color is None: color = "black"
599 if bgcolor is None: bgcolor = "" # transparent
600 if vpid is None: vpid = -1
601 if annid is None: annid = -1
602
603 coloridx = self.get_colorindex(color)
604 bgcoloridx = self.get_colorindex(bgcolor) if (bgcolor.strip() != "") else bgcolor
605
606 self._plotter.set_annotation(label, posx, posy, angle, fjust, size, style, coloridx, bgcoloridx, vpid, annid)
607
608 def set_xlabel(self, label, style=None, size=None, posx=None, posy=None, vpid=None):
609 """\
610 set label string along x axis. when the position of label is
611 specified explicitly by posx and posy, the label appears so
612 that its center placed on the specified position.
613
614 Parameters:
615 label: label string.
616 style: font style. "normal", "roman", "italic" and "script"
617 are available. default is "normal".
618 size: font size. default is 1.1 (10% larger than that
619 of number labels)
620 posx: x position of label string in window coordinate.
621 default is the center of x axis.
622 posy: y position of label string.
623 vpid: viewport id. when not given, the last viewport
624 will be the target.
625 """
626 if style is None: style = ""
627 if size is None: size = 1.1
628 if posx is None: posx = -1.0
629 if posy is None: posy = -1.0
630 if vpid is None: vpid = -1
631
632 self._plotter.set_label_x(label, posx, posy, size, style, 1, 0, vpid)
633
634 def set_ylabel(self, label, style=None, size=None, posx=None, posy=None, vpid=None):
635 """\
636 set label string along y axis. when the position of label is
637 specified explicitly by posx and posy, the label appears so
638 that its center placed on the specified position.
639
640 Parameters:
641 label: label string.
642 style: font style. "normal", "roman", "italic" and "script"
643 are available. default is "normal".
644 size: font size. default is 1.1 (10% larger than that
645 of number labels)
646 posx: x position of label string in window coordinate.
647 posy: y position of label string.
648 default is the center of y axis.
649 vpid: viewport id. when not given, the last viewport
650 will be the target.
651 """
652 if style is None: style = ""
653 if size is None: size = 1.1
654 if posx is None: posx = -1.0
655 if posy is None: posy = -1.0
656 if vpid is None: vpid = -1
657
658 self._plotter.set_label_y(label, posx, posy, size, style, 1, 0, vpid)
659
660 def set_title(self, title, style=None, size=None, posx=None, posy=None, vpid=None):
661 """\
662 set title string over the top of the specified viewport.
663 when the position of title is specified explicitly by posx
664 and posy, the title appears so that its center placed on
665 the specified position.
666
667 Parameters:
668 title: title string.
669 style: font style. "normal", "roman", "italic" and "script"
670 are available. default is "normal".
671 size: font size. default is 1.5 (50% larger than that
672 of number titles)
673 posx: x position of title string in window coordinate.
674 posy: y position of title string.
675 default is the center of y axis.
676 vpid: viewport id. when not given, the last viewport
677 will be the target.
678 """
679 if style is None: style = ""
680 if size is None: size = 1.5
681 if posx is None: posx = -1.0
682 if posy is None: posy = -1.0
683 if vpid is None: vpid = -1
684
685 self._plotter.set_title(title, posx, posy, size, style, 1, 0, vpid)
686
687 def set_vpbgcolor(self, bgcolor, vpid=None):
688 """\
689 change the background color of the specified viewport.
690 default is transparent.
691
692 Parameters:
693 bgcolor: background color. see output of list_colornames().
694 default is "" (transparent).
695 vpid: viewport id. when not given, the last viewport
696 will be the target.
697 """
698 if vpid is None: vpid = -1
699
700 if bgcolor.strip() == "":
701 coloridx = -1
702 else:
703 coloridx = self.get_colorindex(bgcolor)
704
705 self._plotter.set_vpbgcolor(coloridx, vpid)
706
707 def plot(self):
708 """\
709 execute actual plotting.
710 """
711 self._plotter.plot()
712
713 def save(self, filename):
714 """\
715 save the figure in a file with specified name.
716 the filename and device previously set by set_output() is
717 not affected by this command.
718
719 Parameters:
720 filename: output file name.
721 """
722 prev_filename = self._plotter.get_filename()
723 prev_dev = self._plotter.get_device()
724
725 self.set_output(filename)
726 self.plot()
727
728 self.set_output(prev_filename, prev_dev)
729
730 def get_vinfo(self):
731 self._plotter.get_vinfo()
732
733 @classmethod
734 def get_colorindex(cls, colorname):
735 """\
736 convert the given color name into color index used in PGPLOT.
737 """
738 name = colorname.strip().lower()
739 available_color = True
740
741 if name == "white": idx = 0 # our definition of bgcolor
742 elif name == "black": idx = 1 # our definition of fgcolor
743 elif name == "red": idx = 2
744 elif name == "green": idx = 3
745 elif name == "blue": idx = 4
746 elif name == "cyan": idx = 5
747 elif name == "magenta": idx = 6
748 elif name == "yellow": idx = 7
749 elif name == "orange": idx = 8
750 elif name == "yellowgreen": idx = 9
751 elif name == "emerald": idx = 10
752 elif name == "skyblue": idx = 11
753 elif name == "purple": idx = 12
754 elif name == "pink": idx = 13
755 elif name == "gray": idx = 14
756 elif name == "lightgray": idx = 15
757 else: available_color = False
758
759 if (available_color):
760 return idx
761 else:
762 raise ValueError("Unavailable colour name.")
763
764 @classmethod
765 def list_colornames(cls):
766 """\
767 list the available color names.
768 """
769 print "plotter2: default color list ----"
770 print " (0) white (background)"
771 print " (1) black (foreground)"
772 print " (2) red"
773 print " (3) green"
774 print " (4) blue"
775 print " (5) cyan"
776 print " (6) magenta"
777 print " (7) yellow"
778 print " (8) orange"
779 print " (9) yellowgreen"
780 print " (10) emerald"
781 print " (11) skyblue"
782 print " (12) purple"
783 print " (13) pink"
784 print " (14) gray"
785 print " (15) lightgray"
786 print "---------------------------------"
787
788 @classmethod
789 def get_linestyleindex(cls, fstyle):
790 """\
791 convert the given line style into style index used in PGPLOT.
792 """
793 style = fstyle.strip().lower()
794 available_style = True
795
796 if style == "solid": idx = 1
797 elif style == "dashed": idx = 2
798 elif style == "dash-dotted": idx = 3
799 elif style == "dotted": idx = 4
800 elif style == "dash-dot-dot-dotted": idx = 5
801 else: available_style = False
802
803 if (available_style):
804 return idx
805 else:
806 raise ValueError("Unavailable line style.")
807
808 @classmethod
809 def list_linestyles(cls):
810 """\
811 list the available line styles.
812 """
813 print "plotter2: fill style list ----"
814 print " (1) solid"
815 print " (2) dashed"
816 print " (3) dash-dotted"
817 print " (4) dotted"
818 print " (5) dash-dot-dot-dotted"
819 print "------------------------------"
820
821 @classmethod
822 def get_fillstyleindex(cls, fstyle):
823 """\
824 convert the given fill style into style index used in PGPLOT.
825 """
826 style = fstyle.strip().lower()
827 available_style = True
828
829 if style == "solid": idx = 1
830 elif style == "outline": idx = 2
831 elif style == "hatched": idx = 3
832 elif style == "crosshatched": idx = 4
833 else: available_style = False
834
835 if (available_style):
836 return idx
837 else:
838 raise ValueError("Unavailable fill style.")
839
840 @classmethod
841 def list_fillstyles(cls):
842 """\
843 list the available fill styles.
844 """
845 print "plotter2: fill style list ----"
846 print " (1) solid"
847 print " (2) outline"
848 print " (3) hatched"
849 print " (4) crosshatched"
850 print "------------------------------"
851
852 @classmethod
853 def get_arrowheadfillstyleindex(cls, fstyle):
854 """\
855 convert the given arrowhead fill style into style index used in PGPLOT.
856 """
857 style = fstyle.strip().lower()
858 available_style = True
859
860 if style == "solid": idx = 1
861 elif style == "outline": idx = 2
862 else: available_style = False
863
864 if (available_style):
865 return idx
866 else:
867 raise ValueError("Unavailable fill style for arrow head.")
868
869 @classmethod
870 def list_arrowheadfillstyles(cls):
871 """\
872 list the available fill styles for arrow head.
873 """
874 print "plotter2: arrow head fill style list ----"
875 print " (1) solid"
876 print " (2) outline"
877 print "-----------------------------------------"
878
Note: See TracBrowser for help on using the repository browser.