gpt4 book ai didi

r - ggplot2:在四象限图上沿中心轴(即 x=0,y=0)而不是绘图区域的边界定位刻度线

转载 作者:行者123 更新时间:2023-12-04 17:35:30 24 4
gpt4 key购买 nike

我正在尝试调整绘图上刻度线的位置,使它们沿着轴而不是绘图的周边(默认设置)落下。我曾尝试在 ggplot2 中使用 axis.ticks 参数,但这没有用。以下是生成我正在使用的图表所需的一些示例数据和代码:

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))
p = ggplot()
p + geom_point(aes(dat$v1, dat$v2) ,shape = 21, size = 3) +
geom_vline(xintercept = 0, linetype = "dashed") +
geom_hline(yintercept = 0, linetype = "dashed") +
theme_bw()

请告知可用于将刻度线移动到轴上而不是绘图区域外边缘的任何包、函数或参数。

最佳答案

将@user20650 的评论链接到 Moving x or y axis together with tick labels to the middle of a single ggplot (no facets) , 共享@baptiste@user73708的功能。我删除了你的虚线,并将数据和 aes 移动到 ggplot 调用。

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))

shift_axis_y <- function(p, y=0){
g <- ggplotGrob(p)
dummy <- data.frame(y=y)
ax <- g[["grobs"]][g$layout$name == "axis-b"][[1]]
p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(y=1, height=sum(ax$height))),
ymax=y, ymin=y) +
geom_hline(aes(yintercept=y), data = dummy) +
theme(axis.text.x = element_blank(),
axis.ticks.x=element_blank())
}

shift_axis_x <- function(p, x=0){
g <- ggplotGrob(p)
dummy <- data.frame(x=x)
ax <- g[["grobs"]][g$layout$name == "axis-l"][[1]]
p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(x=1, width = sum(ax$height))),
xmax=x, xmin=x) +
geom_vline(aes(xintercept=x), data = dummy) +
theme(axis.text.y = element_blank(),
axis.ticks.y=element_blank())
}

p <- ggplot(dat, aes(v1, v2)) +
geom_point(shape = 21, size = 3) +
theme_bw()

p<-shift_axis_y(p, y=0)
p<-shift_axis_x(p, x=0)
p

关于r - ggplot2:在四象限图上沿中心轴(即 x=0,y=0)而不是绘图区域的边界定位刻度线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799103/

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