我试图绘制一个有很多列的小提琴情节.我会在这样的文件中阅读:
data <- read.table("file.txt", as.is=TRUE);
Run Code Online (Sandbox Code Playgroud)
数据文件将包含许多行,每行都应该是一列.问题是我事先不知道数据文件将包含多少行.从我通过研究发现的,我可以制作一个像这样的小提琴情节:
vioplot(x, y, z, ....);
Run Code Online (Sandbox Code Playgroud)
这会给我一个预设数量的列.我将如何处理所有行?此外,我有一个与列对应的字符串列表,因此命名参数也需要类似的方法.
任何帮助表示赞赏.
do.call 是必需的成语.
例如
nd <- data.frame(t(data))
Run Code Online (Sandbox Code Playgroud)
现在,vioplot需要一个参数来命名x(其余的传入...))
# have the first column called `x`
names(nd)[1] <- 'x'
do.call('vioplot', nd)
Run Code Online (Sandbox Code Playgroud)
set.seed(101)
write.table(matrix(runif(1000),nrow=10),file="tmpfile.txt")
##
Run Code Online (Sandbox Code Playgroud)
基本上,您希望转置数据并将其转换为列列表...
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)
Run Code Online (Sandbox Code Playgroud)
然后用 do.call
do.call(vioplot,cdat)
Run Code Online (Sandbox Code Playgroud)
如果您有要使用的名称向量:
do.call(vioplot,c(cdat,list(names=nameVector)))
Run Code Online (Sandbox Code Playgroud)
(其他参数将被添加到附加参数列表中names)
从长远来看,我建议(1)如果可能的话,按列而不是按行存储数据; (2)熟悉geom_violin()的ggplot2-它是灵活得多.
library(reshape2)
mdat <- melt(t(as.matrix(dat))) ## convert to long format
Run Code Online (Sandbox Code Playgroud)
现在,数据被存储为具有变量的100行×3列数据帧Var1
(其指示来自原始数据集的列)和Var2(来自原始数据集的行,其对应于其中一个变量).
library(ggplot2)
ggplot(mdat,aes(x=factor(Var2),y=value))+geom_violin()+
labs(x="variable")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3122 次 |
| 最近记录: |