我有一个包含两列的数据文件,第1列包含x轴的字符串标签,例如:
label1 20
label2 30
label1 30
label3 20
我在gnuplot中使用以下命令
gnuplot> plot 'datafile' 2:xticlabels(1)
问题是这个命令在两个单独的刻度中生成一个带有label1的图形。我想要做的是将两个y轴值对应于标记为“label1”的相同x-tic。有没有办法在gnuplot中做到这一点?
答案 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
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)
我们会得到什么
答案 2 :(得分:0)
有并且有没有需要使用外部工具或修改原始数据。如果您的“前缀”只是 label
,您也不需要创建唯一元素列表,但您可以通过定义一个函数来简单地提取索引。检查 help strcol
、help 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
结果: