我希望在刻面图上添加刻度线。 例如,对于这样的方面图:
require(ggplot2)
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point() +
theme_minimal() +
geom_hline(yintercept=10, linetype="solid") +
geom_vline(xintercept=1.0, linetype="solid") +
scale_x_continuous(limits=c(1,8), expand =c(0,0),
breaks = rep(2:7)) +
scale_y_continuous(limits = c(10, 50), expand = c(0,0),
breaks = c(20,30,40)) +
facet_wrap(~cyl) +
theme(panel.margin.x=unit(1.2, "lines"),
panel.margin.y=unit(1.2, "lines"))
p
我希望添加刻度线,使其看起来像这样(请注意,虽然刻度标记添加到所有刻面,但刻度标签仅显示在左侧和底部刻面):
我尝试使用annotation_custom
函数向轴添加线条凹凸。但是我的尝试没有用。
require(gridExtra)
require(grid)
x.breaks = rep(2:7)
y.breaks = c(20,30,40)
for (i in 1:length(x.breaks)) {
p = p + annotation_custom(grob = linesGrob(y = unit(c(0, 5), "npc"),
gp=gpar(col= "black")),
xmin = x.breaks[i],
xmax = x.breaks[i],
ymin = 8.69,
ymax = 8.89)
}
for (i in 1:length(y.breaks)) {
p = p + annotation_custom(grob = linesGrob(x = unit(c(0, 5), "npc"),
gp=gpar(col= "black")),
xmin = 0.769,
xmax = 0.809,
ymin = y.breaks[i],
ymax = y.breaks[i])
}
gt = ggplotGrob(p)
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid.draw(gt)
有没有人有任何建议?提前谢谢。
答案 0 :(得分:4)
这是一种削弱数字的低级方法,
p <- ggplot(mpg, aes(displ, hwy)) +
geom_point() +
theme_bw() +
geom_hline(yintercept=10, linetype="solid") +
geom_vline(xintercept=1.0, linetype="solid") +
scale_x_continuous(limits=c(1,8), expand =c(0,0),
breaks = rep(2:7)) +
scale_y_continuous(limits = c(10, 50), expand = c(0,0),
breaks = c(20,30,40)) +
facet_wrap(~cyl, scales="free")
g <- ggplotGrob(p)
g$grobs$axis_b1$children[[2]][["grobs"]][[2]] <- nullGrob()
g$grobs$axis_b2$children[[2]][["grobs"]][[2]] <- nullGrob()
grid.newpage()
grid.draw(g)
还可以删除gtable中的相应空格。
答案 1 :(得分:0)
以下是使用grid.arrange
函数和grid
包的解决方案:
p_top = ggplot(subset(mpg, cyl %in% c(4,5)), aes(displ, hwy)) +
geom_point() +
theme_minimal() +
geom_hline(yintercept=10, linetype="solid") +
geom_vline(xintercept=1.0, linetype="solid") +
scale_x_continuous(limits=c(1,8), expand =c(0,0),
breaks = rep(2:7)) +
scale_y_continuous(limits = c(10, 50), expand = c(0,0),
breaks = c(20,30,40)) +
facet_wrap(~cyl, ncol = 2) +
theme(axis.ticks.x = element_line(), axis.text.x = element_blank()) +
labs(x=NULL, y = NULL)
p_bot = ggplot(subset(mpg, cyl %in% c(6,8)), aes(displ, hwy)) +
geom_point() +
theme_minimal() +
geom_hline(yintercept=10, linetype="solid") +
geom_vline(xintercept=1.0, linetype="solid") +
scale_x_continuous(limits=c(1,8), expand =c(0,0),
breaks = rep(2:7)) +
scale_y_continuous(limits = c(10, 50), expand = c(0,0),
breaks = c(20,30,40)) +
facet_wrap(~cyl, ncol = 2) +
theme(axis.ticks.x = element_line()) +
labs(y = NULL)
library(grid)
grid.arrange(p_top, p_bot, left = textGrob("hwy", rot = 90, vjust = 1))