线型、颜色和样式

在旧版的 gnuplot 中,每个终端类型都提供一组不同的“线型”,这些线型可能有不同的颜色、宽度、点/线图案及其组合。这些颜色和图案不能保证在不同的终端类型中保持一致,尽管大多数是用红/绿/蓝/洋红/青/黄颜色序列。通过命令set colorsequence classic可以选择旧的行为,但是默认情况下,gnuplot 5 版使用一组终端无关的 8 色序列。

你可以进一步在初始化文件或者交互式地自定义线型属性。参考set linetype。在分发包中提供了几个示范的初始化文件。

在设置终端类型之后,当前的线型属性可以通过test命令预览。

单个命令的连续函数或数据文件绘制将按默认序列分配连续的线型。你可以在绘图命令中明确指定线条属性来覆盖。

示例 1

 plot "foo", "bar"         # 用线型 1, 2 绘制两个文件
 plot sin(x) linetype 4    # 使用 4 号线型

通常,可以使用命名颜色、rgb (红、绿、蓝) 分量、hsv (色调、饱和度、值) 分量或者当前 pm3d 调色板坐标来指定颜色。

示例 2

 plot sin(x) lt rgb "violet"       # gnuplot 的命名颜色
 plot sin(x) lt rgb "#FF00FF"      # 十六进制的 RGB 对
 plot sin(x) lt palette cb -45     # 当前调色板范围内对应于 -45 的颜色
 plot sin(x) lt palette frac 0.3   # 沿着调色板的小数值

参考colorspec,show colornames,hsv,set palette,cbrange。参考set monochrome

线型也有相关的点划线图案,虽然不是所有终端类型都能使用。Gnuplot 5 允许指定独立于线条颜色的点划线图案。参考dashtype

colorspec

许多命令允许执行带显式颜色的线型。

语法

  ... {linecolor | lc} {"colorname" | <colorspec> | <n>}
  ... {textcolor | tc} {<colorspec> | {linetype | lt} <n>}

其中 <colorspec> 可以是下列形式:

  rgbcolor "colorname"    # 例如 "blue"
  rgbcolor "0xRRGGBB"     # 十六进制常量字符串
  rgbcolor "0xAARRGGBB"   # 十六进制常量字符串
  rgbcolor "#RRGGBB"      # x11 格式的十六进制常量字符串
  rgbcolor "#AARRGGBB"    # x11 格式的十六进制常量字符串
  rgbcolor <integer val>  # 整数值表示 AARRGGBB
  rgbcolor variable       # 整数值从输入文件读取
  palette frac <val>      # <val> 取值范围 0 到 1
  palette cb <value>      # <val> 在 cbrange 内
  palette z
  variable                # 颜色索引从输入文件读取
  bgnd                    # 背景颜色
  black

"<n>" 是使用其颜色的线型编号。参考test

"colorname" 是指 gnuplot 内置的颜色名称。用show colornames查看可用的颜色名称列表。

十六进制常量可以用括住的 "#RRGGBB" 或 "0xRRGGBB" 形式给出,其中 RRGGBB 代表颜色的红、绿、蓝分量,取值范围 00 到 FF。例如,品红 = 满量程红 + 满量程蓝,可以表示为 "0xFF00FF",即 (255 << 16) + (0 << 8) + (255) 的十六进制表示。

"#AARRGGBB" 表示高位重有 alpha 通道(透明度)的 RGB 颜色。alpha 值 0 表示完全不透明的颜色,即 "#00RRGGBB" 等同于 "#RRGGBB"。alpha 值 255 (FF) 表示完全透明。注意:alpha 通道的这种约定与早期版本的 gnuplot 中 "with rgbalpha" 影像图模式完全相反。

颜色调色板是一种线性的颜色渐变,可以将单个数值平滑地映射到特定颜色上。两个这样的映射总是有效的。palette frac将 0 和 1 之间的小数值映射到颜色调色板的整个范围上。palette cb将颜色轴的范围映射到相同的调色板上。参考set cbrange。也请参考set colorbox。两种方式都可以从当前调色板中选择颜色。

"palette z" 将每个绘图段或绘图元素的 z 值映射到调色板的 cbrange 映射中。这使得 3D 线条或表面具有平滑变化的颜色。也允许 2D 图从数据的额外列读取调色板值(并不是所有 2D 绘图样式都允许有额外的列)。有两种特殊的颜色说明符:bgnd用于背景颜色,以及black

背景颜色

大多数终端允许你为图形设置一个明确的背景颜色。特殊的线型bgnd就绘制这个颜色,而且bgnd也被识别为一个颜色。例如:

 # 擦除画布的一部分,在其中写入背景颜色
 set term wxt background rgb "gray75"
 set object 1 rectangle from x0,y0 to x1,y1 fillstyle solid fillcolor bgnd
 # 沿着 x 轴绘制一条“不可见”的线条
 plot 0 lt bgnd

可变线条颜色

lc variable告诉程序从输入数据的某一列读取数值作为线型索引,并使用属于该线型的颜色。这需要在using说明符指定额外的列。文本颜色可以类似地用tc variable设置。

示例
  # 用第 3 列数据为每个点分别指定颜色
  plot 'data' using 1:2:3 with points lc variable

  # 一个数据文件可以包含多个数据集,由两个空行分隔。
  # 每个数据集按索引值分配 (参考 `index`),
  # 可以通过 `using` 说明符的 `column(-2)` 检索。
  # 参考 `pseudocolumns`。本例用 -2 列的值,为每个数据集分配不同的线条颜色
  plot 'data' using 1:2:(column(-2)) with lines lc variable

rgbcolor variable

你可以为图形中的每个数据点、线段或者标签分配单独的颜色。lc rgbcolor variable告诉程序从数据文件读取 RGB 颜色信息。要求using说明符有相应的额外数据列。额外的列被解释为 24 位 RGB 三元组。如果该值直接在数据文件中提供,最简单的方法是将其作为十六进制值 (参考rgbcolor)。此外,using说明符可以包含一个表达式,其计算结果为 24 位 RGB 颜色,如下例所示。文本颜色也有类似的设置tc rgbcolor variable

示例
  # 用数据点的 x,y,z 坐标计算对应的
  # 红、绿、蓝颜色分量
  rgb(r,g,b) = 65536 * int(r) + 256 * int(g) + int(b)
  splot "data" using 1:2:3:(rgb($1,$2,$3)) with points lc rgb variable

dashtype

在 gnuplot 5 中,虚线图案 (dashtype) 是与每条线相关的单独属性,类似于linecolorlinewidth。没有必要将当前终端放在一个特殊模式以绘制虚线,即,命令set term <termname> {solid|dashed}现在被忽略。如果需要向后兼容 4 版,可以使用下面的写法:

 if (GPVAL_VERSION >= 5.0) set for [i=1:9] linetype i dashtype i
 if (GPVAL_VERSION < 5.0) set termoption dashed

除非另有说明,否则所有线条都具有dashtype solid属性。你可以使用命令set linetype改变特性线型的默认值,使其影响后续所有命令,也可以在plot或其他命令中单独设置虚线。

语法

  dashtype N          # 按编号引用预定义的虚线
  dashtype "pattern"  # 包含点 (.) 短划线 (-) 下划线 (_) 和空格等
                      # 字符组合的字符串
  dashtype (s1,e1,s2,e2,s3,e3,s4,e4)  # 由 1 到 4 数字对 
                      #  <实线长度>, <空隙长度> 指定的虚线图案

示例 1

  # 使用 1 号线型但由虚线类型区分的两个函数
  plot f1(x) with lines lt 1 dt solid, f2(x) with lines lt 1 dt 3

有些终端除了预定义的虚线图案,还支持用户定义的虚线图案。

示例 2

 plot f(x) dt 3            # 使用终端指定的 3 号虚线图案
 plot f(x) dt ".. "        # 实时构建一个虚线图案
 plot f(x) dt (2,5,2,15)   # 用数字描述上一例的虚线图案
 set dashtype 11 (2,4,4,7) # 定义新的 11 号虚线图案
 plot f(x) dt 11           # 用新定义的虚线图案绘图

如果使用字符串来指定虚线图案,程序会将其转换为 <solid>,<empty> 对序列。点 "." 变成 (2,5)、短划线 "-" 变成 (10,10)、下划线 "_" 变成 (20,10)、每个空格字符 " " 将前面的 <empty> 值加 10。命令show dashtype将显示原始字符串和转换后的数字序列。

linestyles vs linetypes

linestyle是 linecolor、linewidth、dashtype 和 pointtype 属性的临时关联。使用set style line命令定义。一旦你定义了线条样式,就可以在绘图命令中使用它来控制绘图元素的外观。换句话说,它就像一个线型,除了它的生存时间。linetypes是永久的 (一直存在到你重新定义它们),linestyles在 reset 之后就没了。

示例

 # 定义一个新的线条样式,使用终端无关的颜色青色、
 # 线宽 3、点类型 6 (圆圈内有个点)。
 set style line 5 lt rgb "cyan" lw 3 pt 6
 plot sin(x) with linespoints ls 5          # 用户定义的 5 号线条样式

results matching ""

    No results matching ""