gpt4 book ai didi

r - 更改 ggplot2 中刻度的位置(在绘图内)

转载 作者:行者123 更新时间:2023-12-02 10:50:13 24 4
gpt4 key购买 nike

我想将左侧图的刻度线位置更改为右侧图的刻度线位置(刻度线位于图内)。

library(ggplot2)
library(grid)

p <- ggplot(mtcars,aes(mpg,cyl))+
geom_point() +
theme(
axis.ticks.length=unit(0.5,"cm"),
axis.line = element_line(color = 'black',size=0.1),
axis.ticks.y = element_line(size=1,color='red'),
axis.text.y = element_text(hjust=0.5))

enter image description here

我认为我可以通过使用 grobs 来获得所需的情节,但令我惊讶的是没有一个简单的设置来调整刻度位置!

编辑(使用解决方案 here 移动刻度线):

设置axis.ticks.length正如所提到的,给出了几乎正确的解决方案,轴文本也应该放置在更靠近轴的位置。 hjust没有效果。

p <- ggplot(mtcars,aes(mpg,cyl))+
geom_point() +
theme(
axis.ticks.length=unit(-0.25, "cm"),
axis.ticks.margin=unit(0.5, "cm"),
axis.line = element_line(color = 'black',size=0.1),
axis.ticks.y = element_line(size=1,color='red'),
axis.text.y = element_text(hjust=0.5)) ##this don't work

enter image description here

最佳答案

这是一个基于操纵绘图 block 的解决方案。它给出了我正在寻找的东西,但操纵 grobs...从来都不是正确的方法(不可读的代码)

adjust_ticks <- 
function(pn,adj=0.5){
## get grobs
p <- p +theme(
axis.ticks.length=unit(adj,"cm")
)
gt <- ggplotGrob(p)
# Get the row number of the left axis in the layout
rn <- which(gt$layout$name == "axis-l")
## Extract the axis ticks grobs (text)
axis.grobs <- gt$grobs[[rn]]
axisb <- axis.grobs$children[[2]]
## change the position of ticks (text and ticks )
gt$grobs[[rn]]$children[[2]]$grobs[[2]]$x <- axisb$grobs[[2]]$x + unit(adj,"cm")
gt$grobs[[rn]]$children[[2]]$grobs[[1]]$x <- axisb$grobs[[1]]$x + unit(adj,"cm")
## show the differnce
gt
}

plot(adjust_ticks(p))

enter image description here

关于r - 更改 ggplot2 中刻度的位置(在绘图内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586756/

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