0%

使用光标

关于光标输入的基本程序有PGCURS和PGBAND.

两外,PGPLOT还提供了三个比较高级的关于光标输入的程序: PGOLIN, PGNCUR和PGLCUR。

这3个程序都要求设备有消除功能。

缓冲

默认情况下, PGPLOT都会确保在视图中我们看到的图像一直是最新的,即每一个PGPLOT的子程序在将控制权返回给调用函数之前就已经更新了图像。为了改善效率,PGPLOT可以把一些指令保存到一个buffer,等到这个buffer满了再一起发送给设备。这就意味着我们看到的图像并不一定时最新的了。这种情况对于一个交互式的程序就存在一定的问题了,用户必须告诉程序什么时候更新。

为了控制buffering的输出,有3个PGPLOT 程序 (PGBBUF, PGEBUF和PGUPDT) 可用。这几个函数都没有参数。

在绘图过程中如果仅仅希望修改图像的部分属性,可以使用PGSAVE和PAUNSA来方便的实现。

PGSAVE保存当前的PGPLOT属性到一个私有存储区域。

这些属性可以由PAUNSA来恢复。

保存的属性包括:

  • 字符字体
  • 字符高度
  • 颜色索引值
  • 填充区域类型
  • 线条类型
  • 线条宽度
  • 绘图位置
  • 箭头类型
  • 阴影类型

颜色显示是不保存的

PS:在调用PGSAVE和PGUNSA的时候,两者一定是成对出现的。

有将近20个属性可以通过PGSAVE来保存。

例如:(下述为fortran代码)

1
2
3
4
5
6
7
8
9
* save current attributes
CALL PGSAVE
* change the attributes and draw something
CALL PGSLW(2)
CALL PGSCI(11)
CALL PGLINE(7, X, Y)
* 还原 the attributes
CALL PGUNSA
RETURN

PGPLOT中有一系列的获取属性函数用于在准备更改基元属性的时候保存旧的属性的函数。
比如:

  • PGQLW(LW) 用于获取线条宽度
  • PGQCI(CI) 用于获取颜色索引

详细参考附录

使用函数PGSFS修改。

填充区域类型有四种格式: solid (实心的,颜色填充整个区域), outline (轮廓的,只有轮廓被描绘), hatched (阴影线,有平行线条构成) or cross-hatched (交叉平行线,有两组交叉的平行线绘制线条s).

各种格式对应的数字代码为:

  • 1: solid (default),
    2: outline
    3: hatched,
    4: cross-hatched.

四种格式如图所示:

1
2
3
4
5
6
7
8
9
10
11
12
/// @file shao_pgplot_fillarea_style.c
cpgsfs(1);
cpgcirc(1., 1., 1.);

cpgsfs(2);
cpgcirc(1., 3., 1.);

cpgsfs(3);
cpgcirc(1., 5., 1.);

cpgsfs(4);
cpgcirc(1., 7., 1.);

Color Index

这个属性影响文本的显示。可以使用PGSTBG来设置。

文本可以使透明的或者不透明的。这个取决于他的属性值。

  • -1: 透明
    0 - 255: 不透明的。

例如如下类似代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/// @file shao_pgplot_text_background.c
cpgstbg(-1);
cpgtext(1,2,"Hello SHAO");

cpgstbg(1);
cpgtext(1,3,"Hello SHAO");

cpgstbg(10);
cpgtext(1,4,"Hello SHAO");

cpgstbg(50);
cpgtext(1,5,"Hello SHAO");

cpgstbg(100);
cpgtext(1,6,"Hello SHAO");

cpgstbg(150);
cpgtext(1,7,"Hello SHAO");

cpgstbg(200);
cpgtext(1,8,"Hello SHAO");

cpgstbg(250);
cpgtext(1,9,"Hello SHAO");

Color Index

字符字体只影响文本。

有四种字体可用,在前面也有过介绍了。

默认的第一种是最简单也是可以最快画出来的。如下:

  1. normal (simple) font (default),
  2. roman font,
  3. italic font,
  4. script font.

可以通过 PGSCF来改变字体。
例如:通过类似下面的代码,显示出四种字体

1
2
3
4
5
6
7
8
9
10
11
12
13
   //@file : shao_pgplot_character_font.c
cpgsch(3);
cpgscf(1);
cpgtext(0, 1, "Hello SHAO using normal font");

cpgscf(2);
cpgtext(0, 4, "Hello SHAO using roman font");

cpgscf(3);
cpgtext(0, 7, "Hello SHAO using italic font");

cpgscf(4);
cpgtext(0, 10, " Hello SHAO using script font");

Color Index

字符高度影响图标记和文本。

默认的字符高度为视图表面的1/40。

可以通过PGSCH来改变字符大小。

1
2
3
4
5
6
7
8
9
10
11
12
/// @file shao_pgplot_character_height.c
cpgsch(1);
cpgtext(1,2,"1. Hello SHAO");

cpgsch(2);
cpgtext(1,3,"2. Hello SHAO");

cpgsch(3);
cpgtext(1,4,"3. Hello SHAO");

cpgsch(10);
cpgtext(1,5,"10. Hello SHAO");

Character Height

线条宽度影响线条、图标记和文本。

可以通过PGSLW来设定线条宽度。

线条的宽度也是因设备而异的,不同的设备可能有不同的分辨率。但大部分的设备上都是的线条的单位宽度为0.005英寸(也就是0.13毫米). 默认宽度为1,最大的可能只为201。

分别对同一组数据进行绘图,

1
2
3
4
5
6
/// @file shao_pgplot_line_width.c
cpgslw(1);
cpgslw(5);
cpgslw(10);
cpgslw(15);
cpgslw(50);

Line Width

线条类型可以是实线、点画先、点线等。

可以通过函数PGSLS来改变。默认的线条类型是实心不间断的线。

下面描述了线条类型的种类:

  1. 实线
  2. 破折号组成的线long dashes,
  3. 划点划点线dash-dot-dash-dot,
  4. 点线dotted,
  5. 划点点点dash-dot-dot-dot.

例如调用PGSLS(1)、PGSLS(2)、PGSLS(3)、PGSLS(4)、PGSLS(5)的效果为(从上到下):

Line Type