我正在尝试绘制具有许多列的小提琴图。我将读取如下文件:

data <- read.table("file.txt", as.is=TRUE);


数据文件将具有许多行,每一行应为一列。问题是我事先不知道数据文件将包含多少行。通过研究发现,我可以像这样绘制小提琴图:

vioplot(x, y, z, ....);


这将只给我预设的列数。我将如何处理所有行?另外,我还有一个与列相对应的字符串列表,因此命名参数也需要类似的方法。

任何帮助表示赞赏。

最佳答案

set.seed(101)
write.table(matrix(runif(1000),nrow=10),file="tmpfile.txt")
##


基本上,您想转置数据并将它们转换为列列表...

dat <- read.table("tmpfile.txt", as.is=TRUE)
cdat <- as.list(as.data.frame(t(as.matrix(dat))))
names(cdat)[1] <- "x"  ## vioplot() needs the first element to be called 'x'
library(vioplot)


然后使用do.call

do.call(vioplot,cdat)


如果您要使用名称向量,请使用:

do.call(vioplot,c(cdat,list(names=nameVector)))


(其他参数将与names一起添加到其他参数列表中)

从长远来看,我建议(1)尽可能按列而不是按行存储数据; (2)熟悉geom_violin()中的ggplot2 -更加灵活。

library(reshape2)
mdat <- melt(t(as.matrix(dat)))  ## convert to long format


现在,数据以变量Var1存储为100行3列数据帧
(表示原始数据集中的列)和Var2(行
来自原始数据集,该数据集对应于变量之一)。

library(ggplot2)
ggplot(mdat,aes(x=factor(Var2),y=value))+geom_violin()+
   labs(x="variable")

关于r - R-多列 fiddle 图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17688240/

10-11 07:21