0

我有制表符分隔格式的数据,其中近 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]

我想在 8 个不同的 pdf 中查看 400 个样本的箱线图,每个样本 50 个。请帮助我获得更好的可视化效果。

4

3 回答 3

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')

在此处输入图像描述

如果您的所有变量都是可比较的,或者至少被分类为理性组,这将是最有用的。hclust对于更复杂的显示,这些heatmap功能在这里也很有帮助。祝你好运!

于 2011-11-04T03:47:27.407 回答
2

我同意你必须做一些激烈的事情来区分同一张图中的 400 个框。下面的代码使用了两个技巧:(1)反转通常的 xy 顺序,以便更容易阅读标签(绘制在 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()
于 2011-11-03T22:57:21.247 回答
1

考虑到您在箱线图中绘制了 400 个框,我对您看不到它们并不感到惊讶。假设您有一个 1024 像素宽的显示器。您的应用程序将只能将框显示为两个像素宽。即使使用更大的屏幕,像素数量也不会增加太多(2000 像素的屏幕最多只能显示 5 像素宽的框)。

我建议将您的盒子绘制在两个或多个单独的图上。

于 2011-11-03T22:11:19.307 回答