我正在尝试绘制具有许多列的小提琴图。我将读取如下文件:
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/