gnuplot - 为每个如此多的行创建boxplot

时间:2016-10-19 09:32:45

标签: plot gnuplot boxplot summary

让我说我有很多表格的数据

<x-value> <y-value> <standard deviation>

当我说&#34;很多&#34;那么我的意思就是用yerrorbars来描绘每一个坐标。

我现在应该为每50行创建一个箱线图(因此,对于行[1..50]为25,对于行x = [51..100]等,为75,等等),等等。 )。

使用gnuplot最快的方法是什么?

修改

显然,我的问题不够准确:

我想获取x = 1..50的所有值,假装它们都发生在25,创建一个boxplot。取x = 51..100的所有值,假装它们都发生在75并创建一个箱线图,依此类推。

1 个答案:

答案 0 :(得分:1)

Gnuplot可以计算箱图并按一些常见的字符串对它们进行分组。您可以使用类似

的函数创建这些字符串
level(x) = sprintf("%d", (int(x)/50)*50 + 25)

使用此功能,每50个值组合成一个新的箱线图:

set style data boxplot
level(x) = sprintf("%d", (int(x)/50)*50 + 25)
plot 'file.dat' using (1):2:(0):(level($1)) notitle

注意,这里我按x值分组。如果要使用行号,请将$1替换为$0。另请注意,每个箱图都有自己的xticlabel,这是你无法避免的。

作为测试用例,请考虑以下脚本(因为仅在Unix平台上生成此测试用例的动态数据):

set style data boxplot
set style fill solid 0.25 noborder
set boxwidth 0.8
level(x) = sprintf("%d", (int(x)/50)*50 + 25)

plot "< seq 0 299 | awk '{print $1,$1}'" using (1):2:(0):(level($1)) notitle 

enter image description here