我正在尝试绘制一个包含许多列的 fiddle 图。我将阅读这样的文件:
data <- read.table("file.txt", as.is=TRUE);
数据文件会有很多行,每一行应该是一列。问题是我事先不知道数据文件会有多少行。根据我通过研究发现的内容,我可以像这样制作 fiddle 图:
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) 熟悉 ggplot2
中的 geom_violin()
-- 它更加灵活。
library(reshape2)
mdat <- melt(t(as.matrix(dat))) ## convert to long format
现在数据存储为 100 行 3 列的数据框,带有变量 Var1
(表示原始数据集中的列)和 Var2
(行
来自原始数据集,对应于其中一个变量)。
library(ggplot2)
ggplot(mdat,aes(x=factor(Var2),y=value))+geom_violin()+
labs(x="variable")
关于R - 多列 fiddle 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688240/