gpt4 book ai didi

r - 向 R 中的刻面图添加刻度线

转载 作者:行者123 更新时间:2023-12-01 12:26:36 24 4
gpt4 key购买 nike

我希望在刻面图中添加刻度线。
例如,对于这样的分面图:

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

enter image description here

我希望添加刻度线,使其看起来像这样(请注意,虽然刻度线已添加到所有方面,但刻度标签仅显示在左侧和底部方面):

enter image description here

我试过使用 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)

有人有什么建议吗?提前致谢。

最佳答案

这是一种削减数字的低级方法,

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)

enter image description here

还可以删除gtable中的相应空间。

关于r - 向 R 中的刻面图添加刻度线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38986702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com