Gnuplot,CSV,只有不同的标签?

时间:2012-01-27 10:32:30

标签: gnuplot

我需要一些关于使用gnuplot处理CSV文件的帮助。 我的CSV文件如下所示:

a,1002
b,612
b,893
b,361
b,932
b,483
b,899
b,614
c,722
d,1038
d,1580

我希望它将第二列用于Y值,行号用作X值。这很容易做到。

我设法把第一列作为xtics标签,但是经过几个小时的Google-ing,我没有找到一个解决方案来告诉gnuplot只打印一个标签一次(我的x轴上挤满了标签,让它变得难以理解) )。

我需要类似的东西:

.
.     b
.a ***** c
.**    ***       d  ****
.        ************
........................

但我得到了这个:

    .
    .  
    .  *****
    .**     ***          ****
    .        ************
    ........................
   sdflksdjflksdjflksdjflkadjflksjdflkasj

标签在轴上或图形线上也没问题,没关系。

2 个答案:

答案 0 :(得分:2)

要设置非定期的xtics,请使用

set xtics ("a" 1, "b" 2, "c" 9, "d" 10)

您可以通过简单的脚本从数据中提取信息,例如

cut -f1 -d, data | while read name ; do
    let line++
    if [[ $name != $oldname ]] ; then
        oldname=$name
        echo "'$name'" $line
    fi
done

答案 1 :(得分:1)

一些进一步的建议:

set pointsize 2.5
set xtics ("a" 1, "b" 5, "c" 9, "d" 10.5)
set xrange [0:12]
plot "< cat -n aa.csv | sed -e 's/,/  /g'" using 1:3 pt 7 notitle

产生不等间距的标签代替x-ticks(如@choroba所示,这也为自动确定较大数据集的中间区间提供了一种方法)。 (此处aa.csv包含您问题中显示的数据。)

enter image description here

如果您希望标签出现在绘图区域而不是x轴下,那么您可以从

开始
set format x ""

然后将您的标签置于上述任何类别中的最高值a,...,d。