Gnuplot:带有重复的字符串xticlabels

时间:2015-04-14 13:53:01

标签: gnuplot

我有一个包含两列的数据文件,第1列包含x轴的字符串标签,例如:

label1 20
label2 30
label1 30
label3 20

我在gnuplot中使用以下命令

gnuplot> plot 'datafile' 2:xticlabels(1)

问题是这个命令在两个单独的刻度中生成一个带有label1的图形。我想要做的是将两个y轴值对应于标记为“label1”的相同x-tic。有没有办法在gnuplot中做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为gnuplot对此没有任何原生支持。您可以做的是在数据中添加另一列,将数字与每个标签相关联。对于示例标签名称,您可以简单地使用标签名称中的最后一个字符。你可以用awk来完成整个事情。例如,请参阅以下命令和输出:

plot "< awk '{print $0, substr($1, length($1), 1)}' gnuplotstringlabels.dat" u 3:2:xticlabels(1) t 'Grouped Labels' ps 2 pt 7

enter image description here

awk命令产生的是:

label1 20 1
label2 30 2
label1 30 1
label3 20 3

当然,您的标签可能不会被称为label1等。您必须为您的数据提供任何产生标签的唯一数字,或者编写更复杂的脚本来添加第三列。

答案 1 :(得分:0)

面临同样的问题,我通过将字符串标签更改为 nums 来解决它。对于来自问题的数据文件,它会像那样

1 20
2 30
1 30
3 20

然后在 gnuplot 脚本文件中添加命令,该命令将 nums 分配给字符串标签

# set ytics for y axis
set xtics ("label1" 1, "label2" 2, "label3" 3)

我们会得到什么

enter image description here

答案 2 :(得分:0)

并且没有需要使用外部工具或修改原始数据。如果您的“前缀”只是 label,您也不需要创建唯一元素列表,但您可以通过定义一个函数来简单地提取索引。检查 help strcolhelp strlen。 以下脚本甚至适用于 2012 年 4 月的 gnuplot 4.6.0。

数据: ('myData.dat')

label1 20
label2 30
label1 30
label3 20

代码:

### plot data with duplicate xlabel
reset

myIdx(col) = int(strcol(col)[6:strlen(strcol(col))])
set offset 1,1,1,1

plot 'myData.dat' u (myIdx(1)):2:xtic(1) w p pt 7 lc rgb "red"
### end of code

结果:

enter image description here