[英]Vioplot R: How to set axis labels
我有一个数据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。 有什么建议么?
PS我找不到标签vioplot
或violinplot
所以无法对其进行标签。
vioplot
不是非常灵活-它不允许您关闭轴标签或对其进行修改-但您可以先创建自己的空图,然后使用vioplot(...,add=TRUE)
小提琴图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()
一起使用(我认为)。
基于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)))
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.