2011-11-03 76 views
0

我有近400列制表符分隔的格式的数据填充值,即箱线图与R轴的限制

  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 

现在我想用箱线图可视化数据method.Though是困难的视图400中单ODF,我想分成50 each.ie(50×8)。这里是我使用的代码:

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

但我得到以下错误:

In plot.window(xlim = xlim, ylim = ylim, log = log, yaxs = pars$yaxs) : nonfinite axis limits [GScale(-inf,4.4591,2, .); log=1]

我想查看包含400个样本的盒子图,每个样本包含8个不同的pdf ......请帮助我获得更好的可视化效果。

+0

您正在同一图表中绘制400个盒子? – James

+0

列是否是绝对的?如果是这样,你为什么使用对数轴?如果不是,也许你应该规范数据集,以便列类型获得它自己的字段(根据@ Ben的答案) - 你会发现更容易理解你的列。 – RobinGower

+0

@James是的,我想在同一个图中绘制 – Dinesh

回答

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() 
+0

'熔化'!你从哪里来过我的生活? – RobinGower

+0

它在'reshape'包(它是'ggplot2'的依赖项,因此自动加载) –

+0

@BenBolker我想要boc图的前50和后50,然后..但是当我尝试使用以下代码“boxplot(raw.expression [1:50],log =”xy“,xlim = c(0.001,70),pch ='。',col = rainbow(ncol(raw.expression [1:50])) )“它使我得到以下错误:”在plot.window(xlim = xlim,ylim = ylim,log = log,yaxs = pars $ yaxs)中: 非限定轴限制[GScale(-inf,4.4591,2,。) ; log = 1]“请帮助我 – Dinesh

1

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

我会建议在两个或多个独立的地块上绘制您的盒子。

2

其他人已经指出,实际的箱柜是不会很好的工作。但是,这是一种非常有效的方式,可以直观地扫描所有变量:只需将其分布作为图像(即热图)绘制即可。下面是一个例子,展示如何获得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函数在这里也可以用于更复杂的显示。祝你好运!

+0

我想制作前50和后50的箱形图,然后......但是当我尝试使用下面的代码“boxplot(raw.expression [1:50],log =” xy“,xlim = c(0.001,70),pch ='。',col = rainbow(ncol(raw.expression [1:50])))”它使我得到以下错误:“在plot.window(xlim = xlim,ylim = ylim,log = log,yaxs = pars $ yaxs): nonfinite axis limits [GScale(-inf,4.4591,2,。); log = 1]“Please help me – Dinesh