【问题标题】:Vioplot R: How to set axis labelsVioplot R:如何设置轴标签
【发布时间】:2013-10-17 01:28:03
【问题描述】:

我有一个数据框 mdata,它看起来像:

>head(mdata)

          ID  variable    value
 SJ5444_MAXGT   coding   4.241920
 SJ5426_MAXGT   coding   4.254331
 HR1383_MAXGT   coding   4.244994
 HR5522_MAXGT   missense 4.250347
CH30041_MAXGT   missense 4.303174
 SJ5438_MAXGT   utr.3    4.242218

我正在尝试绘制这样的小提琴情节:

x1<- mdata$value[mdata$variable=='coding']
x2<- mdata$value[mdata$variable=='missense']
x3<- mdata$value[mdata$variable=='utr.3']

vioplot(x1, x2, x3, names=as.character(unique(mdata$variable)), col="red")
title("Violin Plot: Log10 values")

但我有另一个数据框 ndata,看起来像:

>head(ndata)

           ID variable   value
 SJ5444_MAXGT   coding   17455
 SJ5426_MAXGT   coding   17961
 HR1383_MAXGT   coding   17579
 HR5522_MAXGT   missense 17797
CH30041_MAXGT   missense 20099
 SJ5438_MAXGT   utr.3    17467

基本上 mdata$value 是:

mdata$value = log10(ndata$value)

所以我可以把小提琴情节做好。但我需要更改 Y 轴标签以匹配 ndata$value 而不是 mdata$value。我正在绘制 mdata$value,但希望从 ndata$value 获取 Y 轴标签。仅供参考,这是实际数据的子集,实际数据中的最小值和最大值为 12 和 36937,我知道如何使用以下方法将其绘制在箱线图上:

axis(side=2,labels=round(10^(seq(log10(min(ndata$value)),log10(max(ndata$value)),len=5))),at=seq(log10(min(ndata$value)),log10(max(ndata$value)),len=5))

但我无法绘制 Y 轴标签以匹配小提琴图中的 ndata$value。有什么建议吗?

附:我找不到标签vioplotviolinplot,所以我无法标记它。

【问题讨论】:

    标签: r axis-labels


    【解决方案1】:

    vioplot 不是很灵活——它不允许你关闭轴标签或修改它们——但你可以先创建自己的空图,然后使用@987654323 添加小提琴图@,然后手动添加标签,如下:

    ## make up data
    set.seed(101)
    x1 <- rlnorm(1000,meanlog=3,sdlog=1)
    x2 <- rlnorm(1000,meanlog=3,sdlog=2)
    x3 <- rlnorm(1000,meanlog=2,sdlog=2)
    

    现在创建情节:

    library(vioplot)
    par(las=1,bty="l")  ## my preferred setting
    ## set up empty plot
    plot(0:1,0:1,type="n",xlim=c(0.5,3.5),ylim=range(log10(c(x1,x2,x3))),
         axes=FALSE,ann=FALSE)
    vioplot(log10(x1),log10(x2),log10(x3),add=TRUE)
    axis(side=1,at=1:3,labels=c("first","second","third"))
    axis(side=2,at=-2:4,labels=10^(-2:4))
    

    或者,您可以使用ggplot2::geom_violin()scale_y_log10()(我认为)。

    【讨论】:

    • 有没有办法添加小刻度(以对数刻度)?
    【解决方案2】:

    根据 Ben Bolker 的建议,我使用了 ggplot2::geom_violin() 并达到了我想要的效果,绘制 log10(value) 但使用以下方式在 Y 轴上标记“值”:

    ggplot(mdata, aes(variable, log10(value))) + geom_violin(colour="black",fill="red")
    + scale_y_continuous(
    breaks = seq(log10(min(mdata$value)),log10(max(mdata$value)),len=5), 
    labels = round(10^(seq(log10(min(mdata$value)),log10(max(mdata$value)),len=5)))
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多