【问题标题】:explicit the x-value for plotting in gnuplot显式在 gnuplot 中绘图的 x 值
【发布时间】:2016-03-02 00:48:29
【问题描述】:

在 GNUPLOT 中,我想在一个条形图上绘制 5 个值,并在它们之间用一些间距分隔。如果我的数据格式如下:

3342336、3375103、7110653、32770、0

这 5 个值是 y 值,我如何自己指定 x 值来确定它们应该属于的位置?

例如,我希望我的条形图中每个条目的长度为 1, 所以我在 x 值 1 处绘制 y 值 3342336, x 值 3 处的 y 值 3375103, x 值 5 处的 y 值 7110653, x 值 7 处的 y 值 32770, y 值为 0,x 值为 9。

我将不胜感激任何可以实现此目的的示例代码。谢谢。

【问题讨论】:

  • 数据应该是多行,还是真的格式化为一个逗号分隔的行?

标签: plot gnuplot bar-chart


【解决方案1】:

如果您的数据如图所示在一行中,您可以通过使用 plot for 语法在列索引上循环并从该索引计算 x 值来实现这一点。我们可以使用 column 函数来获取该列,该函数检索指定的列号。

set boxwidth 1
set datafile separator comma    # only if data is comma separated
plot for [i=1:5] (2*i-1):(column(i)) with boxes

如果我们需要确保每次使用相同的线型,我们可以在 plot 命令中明确声明。

plot for [i=1:5] (2*i-1):(column(i)) with boxes lt 1

另外,如果要生成一个键,并且我们不希望每个绘图语句都生成一个,我们可以测试并仅在第一次迭代时给出一个非空标题(空标题被视为与否标题)。

plot for [i=1:5] (2*i-1):(column(i)) with boxes lt 1 title (i==1)?"Title":""

如果您的数据按照正常格式分为行,则可以通过不同的方式获得。

Gnuplot 有几个伪列(有关详细信息,请参阅help pseudocolumns)。在您的情况下,第 0 列是有趣的。第 0 列给出了从 0 开始的数据的行号。因此,要获得这样的连续奇数,您可以使用 2*$0+1

例如,如果您的数据(存储在 datafile.txt 中)看起来像

3342336
3375103
7110653
32770
0

并且您希望在这些值处绘制长度为 1 的框,您可以这样做

set boxwidth 1
plot "datafile.txt" u (2*$0+1):1 with boxes

【讨论】:

  • 如果我的数据在如下列中怎么办: > 3342336 3375103 7110653 32770 0 这样我就无法在我的原始数据文件中重新组织它以全部放入一列中。有没有一种简单的方法可以告诉 gnuplot 使用 (2*$0+1):1 公式读取每一列?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多