调整vioplot包产生的小提琴图上的网格和刻度线

时间:2017-09-25 20:22:47

标签: r plot

以下代码将显示覆盖网格的vioplot

dat <- sample(1:5, 100, replace = TRUE)
vioplot(dat, col = "yellow")
grid (NULL, lty = 6, col = "grey") 

enter image description here

如何删除&#34; 1&#34;的x轴标签,其对应的刻度线,并且只显示水平网格线?

添加以下内容不起作用:

title(xlab="")

1 个答案:

答案 0 :(得分:2)

您可以删除x轴刻度标签并仅绘制水平网格线,如下所示:

library(vioplot)

set.seed(2)
dat <- sample(1:5, 100, replace = TRUE)

# Draw plot without x-axis tick label
vioplot(dat, col = "yellow", names="")

# Draw only horizontal grid lines
grid(NULL, lty = 6, col = "grey", nx=0)

看起来轴刻度标记是硬编码的。但是,您可以修改vioplot函数本身以创建删除刻度线的选项。要获取功能代码,请在控制台中键入vioplot。将代码复制并粘贴到R脚本中,并为该函数指定一个新名称,如my_violin。在vioplot/my_violin内的某处,调用axis函数来绘制x轴。我们只需要添加一种修改此axis调用的方法,以便我们决定是否绘制刻度线。为此,请将以下参数添加到my_violin函数声明中:

tick=TRUE

然后在my_violin函数中找到以下代码行:

axis(1, at = at, label = label)

并将其更改为:

axis(1, at = at, label = label, tick=tick)

现在,使用tick=FALSE

运行新功能
my_violin(dat, col = "yellow", names="", tick=FALSE)
grid(NULL, lty = 6, col = "grey", nx=0)

enter image description here

这是ggplot2对同一情节的处理方法:

library(ggplot2)

ggplot(dat=data.frame(y=dat), aes(x="", y=y)) +
  geom_violin(fill="yellow") + 
  geom_hline(yintercept=1:5, colour="grey40", linetype=4, size=0.3) +
  geom_boxplot(width=0.05) +
  theme_classic() +
  theme(axis.ticks.x=element_blank()) +
  labs(x="", y="")

enter image description here