【问题标题】:How can I justify labels when plotting "with labels" in Gnuplot?在 Gnuplot 中绘制“带标签”时如何证明标签的合理性?
【发布时间】:2010-08-09 11:00:01
【问题描述】:

下面的 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 文档或网络上没有找到任何关于这个特定问题的信息。其他标签可以很容易地证明是合理的,但是用标签绘图时也可以吗?

【问题讨论】:

    标签: plot label gnuplot


    【解决方案1】:

    我无法测试您的特定示例,但我的示例如下:

    ...
    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 版本 4.4 补丁级别 2 ... 终端类型设置为“wxt” gnuplot> 帮助标签 抱歉,“带标签”没有帮助 gnuplot> 帮助 函数和数据可以以多种样式中的一种显示。 `with` 关键字提供了选择的方法。 句法: 与 { {linestyle | } ... 其中之一在哪里 线 点 步骤 errorbars xerrorbar xyerrorlines 点脉冲 fsteps errorlines xerrorlines yerrorbars 线点标签... ... gnuplot> 帮助标签 `labels` 样式从数据文件中读取坐标和文本并放置 对应 2D 或 3D 位置的文本字符串。 3 或 4 个输入列 需要基本数据。 …… 3 列:x y string # 2D 版本 ... 另见`datastrings`,`set style data`。 gnuplot> 帮助设置标签 可以使用“设置标签”命令在绘图上放置任意标签。 句法: 设置标签 {} {""} {at } {左 |中心 |对} {norotate |旋转 {by }} ... 默认情况下,文本与点 x,y,z 左对齐。 调整 标签相对于点 x,y,z 的定位方式,添加 justification 参数,可以是 `left`、`right` 或 `center`, 表示该点位于文本的左侧、右侧或中心。 标绘边界之外的标签是允许的,但可能会干扰 轴标签或其他文本。 如果给出了`rotate`,标签是垂直书写的(如果终端可以做到 所以,当然)。 如果给出 `rotate by `, 符合条件的终端将 尝试以指定的角度书写文字;不合格的终端将 将此视为垂直文本。

    相关部分加粗;他们解释了我的一个误解——在 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 度) - 但是,它现在与该位置右对齐。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是真的,小数点不会完全对齐,但如果字体看起来更好,我接受一个不太理想的解决方案。另外,我想知道在这种特殊情况下,在证明标签的合理性方面是否可能缺少一些东西。
      • 也许你应该使用格式字符串?出于好奇,请尝试左对齐,使用减号“%-5.2f”。
      【解决方案3】:

      这可能是新的,并且在最初提出这个问题时并不存在。但至少从 Gnuplot 5.2 开始,我发现仅使用 with labels left 就可以实现这一目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 2012-02-17
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多