我只想说我是gnuplot的新手...... 试图从文件中绘图:
"Dataset " "Min_sup (%)" Itemsets "Rules " "Exec_time (s)"
Giorno_1 0.1 16392 260337 15.23
Giorno_1 0.2 9719 155963 11.96
Giorno_1 5.0 275 2495 6.43
Giorno_2 0.1 15023 212058 14.14
Giorno_2 0.2 8503 115766 14.62
Giorno_2 0.4 2962 43710 12.90
Giorno_2 0.8 1603 17514 10.53
Giorno_2 1.0 1223 14701 9.96
我想使用“Min_sup”列和“数据集”列作为x轴绘图。这是问题所在:正如您所看到的“数据集”列具有重复的值,我想在图表中只显示一次。
所以基本上我正在寻找一种方法来选择何时绘制x2tics。
我正在使用的gnuplot脚本是:
set style data histograms
set grid
set terminal png nocrop enhanced font verdana 12 size 1024,768
set output "graph.png"
set xtics norangelimit
set xtics border in scale 1,0.5 nomirror rotate by -45 offset character 0, 0
set x2tics ("dataset1" "Giorno_1","dataset2" 2,"dataset3" 3,"dataset4" 4,"dataset5" 5,"dataset6" 6)
set x2tics scale 10
set xlabel "Minimum support in %"
set ylabel "# of "
set style fill transparent solid 0.6 noborder
set datafile separator " "
plot 'prova.dat' using 4:xtic(2):x2ticlabels(1) title col , \
'prova.dat' using 3:xtic(2):x2ticlabels(1) title col
答案 0 :(得分:3)
这样做有点棘手。基本上,您必须保存当前行和上一行的“数据集”值并进行比较。如果它们相同,则不要设置新的x2ticlabel,其他将其用作新标签。
值与using
命令一起存储:
s1 = ''
s2 = ''
plot 'prova.dat' using (s2 = s1, s1 = stringcolumn(1), $4):...
此处,s2
被赋予s1
的值,因此保留前一行的值。然后,为s1
分配第一列的字符串值。使用$4
,使用第四列。这与比较无关,但是使用语句的“正常”部分(using 4
和using ($4)
几乎相同)。
检查在x2ticlabel
功能中完成:
x2tic(s1 eq s2 ? 1/0 : s1)
如果s1
和s1
相等,则使用变量s2
的值作为x2ticlabel。否则它使用1/0
。有了这个,你会得到一些Tic label does not evaluate as string!
的警告,但这就是你想要的。
最后,我从您的脚本中删除了一些默认设置:
set terminal png nocrop enhanced font verdana 12 size 1024,768
set output "graph.png"
set style data histograms
set grid
set xtics nomirror rotate by -45
set x2tics left scale 10
set xlabel "Minimum support in %"
set ylabel "# of "
set style fill transparent solid 0.6 noborder
s1=''; s2='';
plot 'prova.dat' using (s2 = s1, s1 = stringcolumn(1), $4):xtic(2):x2tic(s1 eq s2 ? 1/0 : s1) title col , \
'prova.dat' using 3 title col
给予(4.6.3):