我有以下gnuplot脚本:
set autoscale
unset log
unset label
unset term
unset output
set xtics rotate by -90
set ytic auto
unset title
set xlabel "Survey metadata attribute subset"
set ylabel "Accuracy of classifier (%)"
set boxwidth 0.1
set style fill solid
set term eps
set output "metadata.eps"
plot "metadata.dat" using 1:3:xtic(2) title "PART" with boxes, \
"metadata.dat" using 1:5:xtic(2) title "JRip" with boxes, \
"metadata.dat" using 1:7:xtic(2) title "FURIA" with boxes
但是,这会将所有3组条形图相互叠加,而我希望它们按顺序并排组合在一起。所以它应该是这样的:PARTbar,JRipbar,FURIAbar,gap,PARTbar,JRipbar,FURIAbar,gap等。我将如何做到这一点?
答案 0 :(得分:4)
我想你想要的是set style histogram clustered
。
我采用了一个最小的数据集(见下图)用
绘制图表set style histogram clustered
set xtics rotate by -90
unset title
set xlabel "Survey metadata attribute subset"
set ylabel "Accuracy of classifier (%)"
set boxwidth 1
set style fill solid
set term png
set output "so.png"
plot [-0.5:2.75][1:17] "so.dat"using 3:xtic(2) title "PART" with histograms, \
"" using 4 title "JRip" with histograms, \
"" using 5 title "FURIA" with histograms
产生
我想你可以从这里进一步了解。
数据文件" so.dat":
1 a 10 12 15
2 b 12 14 16
3 c 11 15 14
答案 1 :(得分:2)
假设您的数据看起来像这样
1 a 2 3 4
2 b 1 4 5
3 c 6 7 8
一种选择是将盒子宽度设置得更小,然后手动调整盒子位置,使它们对齐。
我们可以用
来做到这一点set boxwidth 0.25
plot datafile using ($1-0.25):3 with boxes t "First Series", \
"" using 1:4:xtic(2) with boxes t "Second Series", \
"" using ($1+0.25):5 with boxes t "Third Series"
这导致以下图表
请注意,我只在第二个系列(中间的那个)上设置了xtics,我从第一个系列x坐标中减去了boxwidth(将它移回一个盒子单位),并将其添加到最后一个系列(将其向前移动一个箱子单位)。我选择使用0.25的盒宽而不是0.33来允许组之间有一点差距。将xtic仅放在第二个系列上可确保它位于中间的那个上。使用更多的盒子,您将使用不同的宽度,并且必须确定在哪个盒子上设置xtic标签。
另一种方法是使用直方图样式。如果默认的boxwidth为1,则可以执行
plot datafile u 3 with histogram t "First Series", \
"" u 4:xtic(2) with histogram t "Second Series", \
"" u 5 with histogram t "Third Series"
在这种情况下,放置xtic规范的位置无关紧要。
直方图样式非常复杂,有很多选项。基本上它由多个绘图样式组成,这些样式都使用with histogram
规范调用。
选择哪种方法主要取决于个人偏好。第一个是在添加直方图样式之前如何执行此操作。 box方法为您提供了对最终结果的更多手动控制,但直方图样式可以自动完成使这些框恰到好处的许多细节。