来自样品的Gnuplot多个箱图

时间:2014-03-20 19:03:28

标签: r gnuplot boxplot

为了快速可视化测量之间的差异,我想使用gnuplot在单个图中绘制两个(后面的多个)箱图。 基本上我想要想象每次测量的Five-number-summary(最小1号曲线中位数平均值3最大值)。
我的数据文件中的每一列都是'代表测量样本 我的数据采用以下形式:

    A      B    C D
    1.008 1.008 . .
    0.909 0.909 . .
    0.975 0.975
    2.647 2.647
    6.530 1.901
    1.819 0.909
    1.819 0.909
    2.695 0.909
    0.529 0.529
    0.964 0.964
    2.728 0.909
    1.819 0.909
    4.133 1.108
   11.275 6.133
    5.920 5.920
        .     .

我希望它看起来像boxplot demo 但是我无法让演示工作,因为它们似乎使用第三列向右滑动一个箱形图,但我真的不明白它是如何工作的。
为了澄清,在R中我会做这样的事情:

    par(mfrow=c(1,3))
    b1 <- boxplot(datafile$A)
    b2 <- boxplot(datafile$B)
    b3 <- boxplot(datafile$C)

我也想知道如何以相同的比例绘制箱形图。我担心少数几个非常高的值可能会拉伸最大值。箱子的胡须太多了,以至于箱子本身变得太小,我看不到两个箱子中间的差异。


修改
建议的解决方案没问题,直到我尝试绘制其余数据。如果我绘制数据,那么情节会变得如此拥挤,以至于无法看到某些东西 以下是仅包含其余数据的前1000个条目的示例 enter image description here

如何将异常值包含在框中? (我不想丢弃它们。)

2 个答案:

答案 0 :(得分:3)

在示例中,他们使用固定数字来设置每个箱图:

plot 'data.txt' using (0):1 with boxplot

绘制位于x值0的第一列中的数据。对于两个地块,它是相应的:

set style data boxplot
plot 'data.txt' using (0):1, '' using (1):2

Gnuplot无法自动确定列数,但您可以按如下方式实现某种自动化:

file = 'data.txt'
header = system('head -1 '.file);
N = words(header)

set xtics ('' 1)
set for [i=1:N] xtics add (word(header, i) i)

set style data boxplot
unset key
plot for [i=1:N] file using (i):i

如果我复制了你展示的两个列,并用A B C D标记它们,我会用gnuplot 4.6.3得到以下图:

enter image description here

如您所见,不考虑异常值。要隐藏异常值,请使用set style boxplot nooutliers

答案 1 :(得分:0)

我遇到了同样的问题并找到了原因。如果您在数据集中多次使用异常值,那么gnuplot会将它们绘制成一行,从而生成与您所显示的图形类似的图形。

显然你无法避免它或抑制其他值。你可以做的是告诉gnuplot使用胡须,它们也标记了最大值和最小值。根据维基百科,这是使用胡须的一种替代方法。我不知道它是否适合您的情节,但它通过规避它来解决问题。

我不确定我是否可以帮助你,但也许遇到这种情况的人发现它很有用,或者甚至可以提出一种方法来删除异常值的附加点。