在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参数。
有什么办法可以使其正常工作吗?
答案 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))
哪个给: