【发布时间】:2018-09-04 14:42:38
【问题描述】:
我需要在ggplot2 中创建一个双 y 轴。我曾尝试遵循此处发布的@kohske 解决方案:http://rpubs.com/kohske/dual_axis_in_ggplot2 但是,仍有两件事是不受欢迎的,我不知道如何解决它们。
1. 在右 y 轴标签下方的情节中,不存在,而我想让它出现
2.右侧y轴的网格线显示在条形图的顶部,而它应该在背景中。
剧情如下:
和代码:
library(ggplot2)
library(grid)
library(gtable)
grid.newpage()
p1 <- ggplot(ex,
aes(factor(subgroups, levels = c('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday')),
y_left)) +
geom_bar(fill = rgb(16/255, 72/255, 128/255), stat = 'identity') +
theme_bw() +
labs(x = 'weekday')
p2 <- ggplot(ex, aes(factor(subgroups,
levels = c('Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday', 'Sunday')), y_right)) +
geom_line(colour = rgb(237/255, 165/255, 6/255), group = 1) +
geom_point(color = rgb(237/255, 165/255, 6/255), size = 3) +
scale_y_continuous(limits = c(0, 180)) +
labs(y = 'name for y_left axis') +
theme_bw() %+replace%
theme(panel.background = element_rect(fill = NA))
# extract gtable
g1 <- ggplot_gtable(ggplot_build(p1))
g2 <- ggplot_gtable(ggplot_build(p2))
# overlap the panel of 2nd plot on that of 1st plot
pp <- c(subset(g1$layout, name == "panel", se = t:r))
g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t,
pp$l, pp$b, pp$l)
# axis tweaks
ia <- which(g2$layout$name == "axis-l")
ga <- g2$grobs[[ia]]
ax <- ga$children[[2]]
ax$widths <- rev(ax$widths)
ax$grobs <- rev(ax$grobs)
ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")
g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)
g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)
# draw it
grid.draw(g)
【问题讨论】:
-
你不需要这样做。他们不久前为 ggplot 添加了辅助轴选项。尝试将
geoms 放在一个图上并添加scale_y_continuous(sec.axis = sec_axis(~.-280), name = "2nd axis name")。您可能需要调整公式以使事情按需要排列。