在Gnuplot中绘制“带标签”时,如何证明标签的合理性?

时间:2010-08-09 11:00:01

标签: plot label gnuplot

以下plot命令生成一个条形图,在每个条形图上方,该值被绘制为标签,格式为gprintf:

plot "data.txt" using 6:1 index 0 notitle with boxes linestyle 1,\
     "data.txt" using 6:(0.7):(gprintf("%5.2f", $1)) index 0 notitle \
                                       with labels font "Courier,34" rotate left

我希望值标签右对齐,这样我就可以使用看起来更漂亮的Helvetica字体代替Courier来对齐小数点。

那么,我如何在上述命令中包含理由?

我没有在Gnuplot文档或Web上找到有关此特定问题的任何内容。其他标签可以很容易地证明,但是当用标签绘图时也可以这样做吗?

3 个答案:

答案 0 :(得分:5)

我无法测试你的特定例子,但我的看起来像是:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels rotate left notitle
...

......其中“rotate left”部分来自OP。

好吧,我没有太多运气找到有关网上标签的“对齐”或“理由”的信息;所以我试着查看在线gnuplot的帮助。基本上,相关的东西都在help set label下 - 我不确定我到底是怎么做到的,但这里是我的命令日志;

$ gnuplot
...
    G N U P L O T
    Version 4.4 patchlevel 2
...

Terminal type set to 'wxt'
gnuplot> help with labels
Sorry, no help for 'with labels'
gnuplot> help with 
 Functions and data may be displayed in one of a large number of styles.
 The `with` keyword provides the means of selection.

 Syntax:
       with  { {linestyle | ls }
...
where  is one of

      lines        dots       steps     errorbars     xerrorbar    xyerrorlines
      points       impulses   fsteps    errorlines    xerrorlines  yerrorbars
      linespoints  labels  ...
...
gnuplot> help labels
 The `labels` style reads coordinates and text from a data file and places
 the text string at the corresponding 2D or 3D position.  3 or 4 input columns
 of basic data are required.  ....

      3 columns:  x  y  string    # 2D version
...
 See also `datastrings`, `set style data`.

gnuplot> help set label
 Arbitrary labels can be placed on the plot using the `set label` command.

 Syntax:
       set label {} {""} {at }
                 {left | center | right}
                 {norotate | rotate {by }}
                 ...
 By default, the text is placed flush left against the point x,y,z.  To adjust
 the way the label is positioned with respect to the point x,y,z, add the
 justification parameter, which may be `left`, `right` or `center`,
 indicating that the point is to be at the left, right or center of the text.
 Labels outside the plotted boundaries are permitted but may interfere with
 axis labels or other text.

 If `rotate` is given, the label is written vertically (if the terminal can do
 so, of course).  If `rotate by ` is given, conforming terminals will
 try to write the text at the specified angle; non-conforming terminals will
 treat this as vertical text.

相关部分用粗体表示;他们解释了我的一个误解 - 在OP示例中看到rotate left,我认为leftrotate的属性,但它不是 - left是一个单独的理由参数,而rotate是一个单独的旋转关键字(即rotate left并不意味着“逆时针旋转90度”,正如我最初想的那样)。

如果是这样,那么可以将这两个关键字反转:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels left rotate notitle
...

...并获得完全相同的输出图。如果最后我们将left替换为right,例如:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels right rotate notitle
...

...我们可以看到标签旋转“左”(逆时针旋转90度) - 但是,它现在与位置右对齐。

嗯,希望这有帮助,
干杯!

答案 1 :(得分:1)

使用"%5.2f"格式将打印字段的宽度指定为5个空格。对于小数部分消耗2个空格,对于小数点消耗1个空格,对于数字的整数部分仅留下2个空格。因此,如果您绘制指定的0.7以外的数字,则生成的字符串将更宽。 另外,Helvetica是一种非等宽字体,因此数字的字符宽度不一样。因此,右对齐输出不会解决问题 - “。11”和“.88”不会是小数点对齐。

答案 2 :(得分:0)

这个问题很可能是新的,最初问这个问题时就不存在了。但是至少从Gnuplot 5.2开始,我发现仅使用traverse id就可以实现这一目标。