2015-08-08 74 views
1

我试图用一个只包含0或1的简单数据文件(.example)构建一种条形图。这里包含的数据.exampleGnuplot - 用两个命令迭代

dest P1 P2 P3 P4 P5 NA 
D1 0 1 1 0 0 0 
D2 0 0 1 0 0 0 
D3 0 1 0 1 0 0 
"" 
GPV 1 1 1 1 1 1 

,这里是我使用的代码:

set style histogram rowstacked title textcolor lt -1 
set datafile missing 'nan' 
set style data histograms 

plot '.example' using ($2==0 ? 1 : 0) ls 17 title 'NA', \ 
'' using ($2==1 ? 1 : 0) ls 1, \ 
for [i=3:5] '.example' using (column(i)==0 ? 1 : 0) ls 17 notitle, \ 
for [i=3:5] '' using (column(i)==1 ? 1 : 0) ls i-1 

其中最后两个命令遍历一个潜在的大量 列堆叠白色或彩色的取决于column(i)的值。要保持直方图中不同列的颜色顺序相同,我需要将两个迭代合并为一个包含两个命令的迭代。

可能吗?有关如何做到这一点的任何建议?

回答

0

您可以使用嵌套循环,我认为这是您想要实现的。您可以使用迭代遍历大量列的外部循环和遍历两个选项(白色或彩色)的内部循环(for [i=3:5] for [j=0:1]),并告诉gnuplot忽略该列,前提是其内容与j的值不匹配1/0(或使用的伎俩,有效的直方图,将其设置为0作为你已经做):

set style histogram rowstacked title textcolor lt -1 
set datafile missing 'nan' 
set style data histograms 

plot '.example' using ($2==0 ? 1 : 0) ls 17 title 'NA', \ 
'' using ($2==1 ? 1 : 0) ls 1, \ 
for [i=3:5] for [j=0:1] '.example' using (column(i) == j ? 1 : 0) \ 
ls (j == 0 ? 17 : i-1) notitle 

上面的代码就相当于你有什么已经,只有j值允许开关样式取决于您是否有01作为列的值。

+0

嗨,谢谢你的帮助。您提出的解决方案对我来说是完美的,但实际上'列'只能与'使用'一起使用,而不能与'ls'或'标题'规范一起使用。另外,嵌套循环并没有真正的帮助,因为正确理解我需要基于数据中的0或1读取来指定'ls'。 –

+0

对不起,我无法测试该命令,因为您没有发布示例数据文件(下次尝试这样做)。我会用不同的解决方案解决我的问题。 – Miguel

+0

此外,在将来,请尝试将问题降低到与实际问题相关的最小值,例如删除示例中其他文件的绘图。这使得它更容易引起人们的注意,因为我们需要更少的时间和精力来阅读和理解问题。 – Miguel