R-在变量顶部添加刻度线吗?

时间:2019-05-09 22:40:13

标签: r ggplot2

在ggplot2中,当我具有变量级别时,如何在顶部x轴上添加刻度线?

例如,看一下以下图形:

library(ggplot2)

ToothGrowth$dose <- factor(ToothGrowth$dose, levels=unique(ToothGrowth$dose))

p <- ggplot(data=ToothGrowth, aes(x=supp, y=len, fill=dose)) +
geom_boxplot() +
theme_bw(base_size=20) +
scale_y_continuous(sec.axis=dup_axis(labels=NULL,name=NULL))
p

上面的情节在右轴上也有刻度,这是我需要的一半。

但是当我尝试在顶部轴上添加刻度线时:

p + 
scale_x_continuous(labels = levels(ToothGrowth$supp),
                   breaks = seq_along(levels(ToothGrowth$supp)),
                   sec.axis=dup_axis(labels=NULL,name=NULL))

我收到消息:

Error: Discrete value supplied to continuous scale

之所以发生这种情况是因为我在dose变量中有级别。

我尝试使用scale_x_discrete。但是,它不接受sec.axis参数。

有什么办法可以使其正常工作吗?

1 个答案:

答案 0 :(得分:2)

您可以将x变量转换为数字,然后分组并从原始变量复制标签。

public map(type:string):TemplateRef {
   return (this as any)[type]; // may break in future
}

根据OP更新帖子进行编辑:

这确实使事情复杂化了一点。这将使您接近,但这并不完美。也许其他人会采用更好的方法或某种方法来消除内部边界。

ToothGrowth %>%
  mutate(supp2 = as.numeric(supp)) %>%
  ggplot(aes(x=supp2, y=len, group = supp)) +
  geom_boxplot() +
  theme_bw(base_size=20) +
  scale_y_continuous(sec.axis=dup_axis(labels=NULL,name=NULL)) +
  scale_x_continuous(labels = levels(ToothGrowth$supp), breaks = seq_along(levels(ToothGrowth$supp)), sec.axis=dup_axis(labels=NULL,name=NULL)) 

哪个给:

enter image description here