[英]R - Violin plots with many columns
我試圖繪制一個有很多列的小提琴情節。 我會在這樣的文件中閱讀:
data <- read.table("file.txt", as.is=TRUE);
數據文件將包含許多行,每行都應該是一列。 問題是我事先不知道數據文件將包含多少行。 從我通過研究發現的,我可以制作一個像這樣的小提琴情節:
vioplot(x, y, z, ....);
這會給我一個預設數量的列。 我將如何處理所有行? 此外,我有一個與列對應的字符串列表,因此命名參數也需要類似的方法。
任何幫助表示贊賞。
do.call
是所需的成語。
例如
nd <- data.frame(t(data))
現在, vioplot
需要一個名為x
的參數(其余的傳入...
))
# have the first column called `x`
names(nd)[1] <- 'x'
do.call('vioplot', nd)
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
一起添加到additional-arguments列表中)
從長遠來看,我建議(1)如果可能的話,按列而不是按行存儲數據; (2)熟悉geom_violin()
在ggplot2
-它更加靈活。
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")
如何使用parse
和eval
動態構建和計算表達式(可能不是一個好方法,但我認為它將滿足您的需求)....
# Turn rows into columns
nd <- t(data)
# Explicitly give some names to your columns
colnames(nd) <- paste0( "V",1:ncol(nd) )
# Make some violin plots
require(vioplot)
eval( parse( text = paste0( "vioplot(" , paste0( paste0( "nd[,\"" , colnames(nd) , "\"]" ) , collapse="," , sep="" ) , ")" ) ) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.