【问题标题】:r producing multiple violin plots with one graphic devicer 用一个图形设备制作多个小提琴图
【发布时间】:2013-06-27 17:09:24
【问题描述】:

我有一个看起来像这样的数据框:

bin_with_regard_to_strand CLONE3
 31                      0.14750872 
 33                      0.52735917
 28                      0.48559060
 .                            .
 .                            .

我想使用此数据框生成小提琴图,使CLONE3 中与给定值bin_with_regard_to_strand 对应的所有值都将生成一个图。 此外,我希望所有的绘图都出现在同一个图形设备中(我使用的是 R-studio,我希望所有的绘图都出现在一个绘图窗口中)。 理论上我可以这样做:

vioplot(df$CLONE3[which(df$bin_with_regard_to_strand==1)], 
  df$CLONE3[which(df$bin_with_regard_to_strand==2)]...)

但由于bin_with_regard_to_strand 有60 个不同的值,这似乎有点荒谬。 我尝试使用tapply:

tapply(df$CLONE3, df$bin_with_regard_to_strand,vioplot)

但这会打开 60 个不同的窗口(每个地块一个)。 或者,如果我使用add 参数:

 tapply(df$CLONE3, df$bin_with_regard_to_strand,vioplot(add=TRUE))

使用来自所有值 bin_with_regard_to_strand 的数据生成一个图(以线分隔)。

有没有办法做到这一点?

【问题讨论】:

标签: r plot


【解决方案1】:

您可以使用par(mfrow=c(rows, columns))(详情请参阅?par)。

(另请参阅?layout 了解更复杂的安排)

d <- lapply(1:6, function(x)runif(100)) # generate some example data

library("vioplot")

par(mfrow=c(3, 2)) # use a 3x2 (rows x columns) layout

lapply(d, vioplot) # call plot for each list element

par(mfrow=c(1, 1)) # reset layout

【讨论】:

  • 谢谢!这正是我想要的
【解决方案2】:

mfrow 的另一种替代方法是使用layout。组织你的情节非常方便。您只需创建一个带有绘图索引的矩阵。在这里你可以做什么。似乎 60 个箱线图是一个巨大的数字。也许你应该把它们分成两页。

N(地块数)函数中的以下代码

library(vioplot)
N <- 60
par(mar=rep(2,4))  
layout(matrix(c(1:N),
              nrow=10,byrow=T))
dat <- data.frame(bin_with_regard_to_strand=gl(N,10),CLONE3=rnorm(10*N))
with(dat , 
     tapply(CLONE3,bin_with_regard_to_strand ,vioplot))

【讨论】:

    【解决方案3】:

    这是一个老问题,但尽管我会提出一个不同的解决方案来让 vioplot 在同一个图(即相同的轴)上制作多个小提琴图,而不是像上面的答案那样在不同的图形对象上制作。

    基本上使用do.callvioplot 应用于数据列表。归根结底,vioplot 写得不是很好(甚至不能设置标题、轴名等)。我通常更喜欢 base R,但在这种情况下,ggplot2 选项可能是要走的路。

    x<-rnorm(1000)
    fac<-rep(c(1:10),each=100)
    listOfData<-tapply(x,fac,function(x){x},simplify=FALSE)
    names(listOfData)[[1]]<-"x" #because vioplot requires a 'x' argument
    do.call(vioplot,listOfData)
    

    resultingImage

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2023-03-06
      • 2017-08-20
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      • 2019-12-21
      相关资源
      最近更新 更多