2

次のようなデータフレーム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)

だから私はヴァイオリンのプロットを大丈夫にすることができます。しかし、mdata$value ではなく ndata$value に一致するように Y 軸のラベルを変更する必要があります。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))

しかし、ヴァイオリン プロットの ndata$value と一致するように Y 軸ラベルをプロットすることはできません。助言がありますか?

PSタグが見つからなかったか、タグ付けvioplotできviolinplotませんでした。

4

2 に答える 2

2

vioplotはあまり柔軟ではありません-軸ラベルをオフにしたり変更したりすることはできません-しかし、最初に独自の空のプロットを作成し、次にバイオリンプロットをそれにvioplot(...,add=TRUE)追加し、ラベルを手動で追加できます。次のとおりです。

## 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()

于 2013-10-17T13:33:59.497 に答える
1

Ben Bolker の提案に基づいて、ggplot2::geom_violin() を使用し、log10(value) をプロットしますが、次を使用して Y 軸に 'value' というラベルを付けて、目的を達成しました。

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)))
)
于 2013-10-17T16:37:14.037 に答える