【问题标题】:Display underscore rather than subscript in gnuplot titles在 gnuplot 标题中显示下划线而不是下标
【发布时间】:2012-11-19 06:05:53
【问题描述】:

小问题: 如何在 gnuplot 的标题中显示 _(下划线)字符,该字符是从 gnuplot 中的变量名分配的?

详情: 我有类似以下代码:

items = "foo_abc foo_bcd bar_def"
do for [item in items] {
  set title item
  set output item.eps
  plot item."-input.txt" using 1:2 title item with linespoints
}

除了标题从 foo_abc 更改为 fooabc 之外,这在 gnuplot 上工作得很好。我不知道是否要使用转义字符,因为我不希望它出现在文件名中。我用单引号和双引号尝试了几个不同的选项,但我还没有找到我需要的。

【问题讨论】:

  • 在您的情况下,下划线是否始终位于字符串名称的同一位置?也就是说,len('foo')==len('bar') 会不会?在这种情况下,我可能有部分解决方案。
  • 没有那些只是碰巧在我给出的例子中。
  • 好的。您是否尝试在 postscript 终端中使用 noenhanced 选项?
  • 我刚刚尝试过,现在似乎可以使用,虽然我不知道增强和无增强之间的区别是什么,或者我以后是否需要这些功能。无论哪种方式,您的答案都可以解释正在发生的事情,如果需要,我可以使用其他一些技术来获取带有和不带有转义字符的名称。谢谢。

标签: gnuplot


【解决方案1】:

不要写foo_abc,而是写foo\\\_abc

【讨论】:

  • 最佳答案!
【解决方案2】:

下划线来自将标题视为“增强文本”。使用关闭它

设置键不增强

【讨论】:

  • 完美:直截了当,当 OP 只讨论标题时,不会笨拙地删除其他任何地方的增强功能。
【解决方案3】:

标题中的下划线我也有同样的问题:比如我需要写4_3子帧,我需要增强后记。最简单的方法原来来自相邻的帖子:``如果您使用的是增强的 eps 终端,这就是您首先需要转义下划线的原因。今天还有另一个相关的问题,稍微解释了这个问题。” - How is @ produced in gnuplot? 所以,我听从了他们的建议,这很奏效:

plot 'LC.stats' u 3:4 ti "{/=15 1350 stars in C18 4\_3 subframe}" - 下划线前的双转义字符。

【讨论】:

    【解决方案4】:

    大多数生成标签的 gnuplot 命令都接受 noenhanced 关键字,这将阻止 gnuplot 仅对该字符串使用增强文本。在这种情况下,只需执行以下操作就足够了:

    set title item noenhanced
    

    另一种方法是创建一个函数,该函数在将字符串传递给set output时从字符串中删除不需要的文本:

    remove(x,s)=(i0=strstrt(s,x),i0 ? remove(x,s[:i0-1].s[i0+strlen(x):]):s)
    # Makes me wish gnuplot syntax was more pythonic :-p
    #TODO:  Write a `replace` function :-).  These just might go into my ".gnuplot" file...
    

    我使用内联函数在字符串s 中查找x 第一次出现的索引。然后我通过字符串连接和切片删除该事件,并再次递归调用该函数以删除下一个事件。如果没有找到索引(strstrt 返回 0),那么我们只返回输入的字符串。现在你可以这样做:

    set output remove('\',item)
    set title item
    

    【讨论】:

    • 优秀的答案!我不知道单个标签的 noenhanced 标志。我想做类似你的递归函数的东西,但不知何故我错过了strstrt 函数。
    • @andyras -- 我为remove 功能感到非常自豪 -- 因此我的评论可能会将它放在我的~/.gnuplot 文件中:)
    【解决方案5】:

    如果您使用的是增强型 eps 终端,这就是您首先需要转义下划线的原因。今天有another related question 稍微解释了这个问题。设置终端时,尝试:

    set terminal postscript noenhanced <whatever else here...>
    

    这对我有用(Arch linux,gnuplot 4.7.0)。如果增强终端是必不可少的,下面是我找到的部分解决方案。假设是下划线总是出现在字符串中的相同位置。

    set terminal postscript enhanced
    items = 'foo\_abc foo\_bcd bar\_def'
    do for [item in items] {
      set output item[1:3].item[5:*].'.eps'
      set title item
      plot sin(x)
    }
    

    这样您可以转义下划线,并且文件名中不会出现 \。注意 'items' 字符串使用单引号;有关详细信息,请参阅之前链接的问题。

    【讨论】:

    • 您可以通过使用内联递归函数来消除在同一位置包含 ` \ ` 的限制。 (内联部分也可以放宽......但它有助于不重复评估 strstrt 函数:)。不过答案很好。 +1 给了我一个更进一步的想法。
    • 当您的 CSV 文件在第一行提供绘图键时,这也适用于 set key autotitle columnhead noenhanced
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多