r - R - 在变量级别的绘图顶部添加刻度?
问题描述
在 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。
有什么办法让它工作吗?
解决方案
您可以将 x 变量转换为数字,然后分组并从原始变量中复制标签。
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))
编辑以响应 OP 更新帖子:
这确实使事情复杂了一点。这会让你接近,但它并不完美。也许其他人会提出更好的方法或移除内部边界的方法。
ToothGrowth %>%
mutate(dose = factor(dose),
cons = 1) %>%
ggplot(aes(x = cons, y = len)) +
geom_boxplot(aes(fill = dose)) +
facet_wrap(~supp, strip.position = "bottom") +
theme_bw(base_size = 20) +
scale_y_continuous(sec.axis = dup_axis(labels = NULL,name = NULL)) +
scale_x_continuous(labels = NULL, breaks = 1, sec.axis = dup_axis(labels = NULL,name = NULL)) +
theme(strip.placement = "outside",
strip.background = element_rect(color = "white", fill = "white"),
panel.spacing.x = unit(0, "mm"),
axis.title.x = element_blank())
这使:
推荐阅读
- c# - 获取从一个 StartNode 传出的具有属性的所有节点和关系
- javascript - 如何专注于 iFrame 中的输入
- jquery - 为什么 unmask() 函数不能正常工作?
- sql - 如何从 Microsoft Data verse Table 创建 SQL 架构
- excel - Excel:“对象变量或未设置块变量”
- python - 如果字典中存在列表,则迭代字典中的列表。在 Python 中
- java - 使用 PowerMock 对 Jsoup 进行单元测试
- swift - 在调整大小时将集合视图的单元格与其底部对齐
- driver - 使用 EtherType 0x88A4 (EtherCat) 时,WriteFile 函数 (NDIS) 中出现错误 87
- python - 用于图像合成的动态关键点标注