带有轴限制的箱形图在R中

时间:2011-11-03 21:55:14

标签: r boxplot

我有以制表符分隔格式的数据,其中有近400列填充了值,即

         X             Y         Z               A       B               C  
        2.34          .89       1.4             .92     9.40            .82
        6.45          .04       2.55            .14     1.55            .04
        1.09          .91       4.19            .16     3.19            .56
        5.87          .70       3.47            .80     2.47            .90

现在我想使用箱形图方法来显示数据。虽然很难在单个odf中查看400,但我想分成50个。我(50 x 8)。这是我使用的代码:

boxplot(data[1:50],xlab="Samples",xlim=c(0.001,70),log="xy", 
        pch='.',col=rainbow(ncol(data[1:50))) 

但我收到以下错误:

  

在plot.window中(xlim = xlim,ylim = ylim,log = log,yaxs = pars $ yaxs)   :非限定轴限制[GScale(-inf,4.4591,2 ,.);日志= 1]

我想查看400个样本的盒子图,每个样本有50个,每个样本为8个....请帮助我获得更好的可视化效果。

3 个答案:

答案 0 :(得分:3)

其他人已经指出实际的箱形图不会很好用。但是,一种可视化扫描所有变量的非常有效的方法:只需将其分布绘制为图像(即热图)。这是一个示例,显示如何获得400个变量和80,000个单独数据点的要点非常容易!

# Simulate some data
set.seed(12345)
n.var = 400
n.obs = 200
data  = matrix(rnorm(n.var*n.obs), nrow=n.obs)

# Summarize data
breaks = seq(min(data), max(data), length.out=51)
histdata = apply(data, 2, function(x) hist(x, plot=F, breaks=breaks)$counts)

# Plot
dev.new(width=4, height=4)
image(1:n.var, breaks, t(histdata), xlab='Variable Index', ylab='Histogram Bin')

enter image description here

如果您的所有变量都具有可比性,或者至少被归类为理性组,那么这将非常有用。 hclustheatmap函数对于更复杂的显示也很有帮助。祝你好运!

答案 1 :(得分:2)

我同意你必须做一些有点激烈的事情来区分同一图表中的400个盒子。下面的代码使用两个技巧:(1)反转通常的x-y顺序,以便更容易读取标签(在y轴上绘制); (2)将输出发送到一个高大的,精简的PDF文件,以便您可以在闲暇时滚动它。我还选择按平均值对变量进行排序,以使图更易于解释 - 这是可选的,但我怀疑在任何情况下你都很难在400箱的情节中查找特定的类别。

nc <- 400
z <- as.data.frame(matrix(rnorm(nc*100),ncol=nc))
library(ggplot2)
m <- melt(z)
m <- transform(m,variable=reorder(variable,value))
pdf(width=10,height=50,file="boxplot.pdf")
print(ggplot(m,aes(x=variable,y=value))+geom_boxplot()+coord_flip())
dev.off()

答案 2 :(得分:1)

考虑到你在你的盒子图中绘制了400个盒子,我很惊讶你看到它们时遇到了麻烦。假设您有一个1024像素宽的显示器。您的应用程序只能将框显示为两个像素宽。即使屏幕较大,也不会增加像素数量(2000像素的屏幕最多会显示5像素宽的盒子)。

我建议在两个或多个单独的地块上绘制你的盒子。