R 更改ggplot2中记号的位置(在绘图内)

R 更改ggplot2中记号的位置(在绘图内),r,plot,ggplot2,R,Plot,Ggplot2,我想将左图中记号的位置更改为右图中记号的位置(记号在图中) 这里有一个基于操纵绘图栏的解决方案。它给出了我想要的东西,但操纵grobs…从来都不是正确的方法(不可读的代码) 调整刻度,或者调整几何地毯?如果您同意在内部设置所有记号,这里有一个可能的解决方案:@RomanLuštrik看起来是一个很好的解决方案,将文本标签调整到右侧如何?我想您可以使用负长度将记号置于内部,每个轴:axis.ticks.length=unit(-0.25,“cm”)调整轴时会出现这种情况。记号。边距可以控制标签和轴

我想将左图中记号的位置更改为右图中记号的位置(记号在图中)


这里有一个基于操纵绘图栏的解决方案。它给出了我想要的东西,但操纵grobs…从来都不是正确的方法(不可读的代码)


调整刻度,或者调整几何地毯?如果您同意在内部设置所有记号,这里有一个可能的解决方案:@RomanLuštrik看起来是一个很好的解决方案,将文本标签调整到右侧如何?我想您可以使用负长度将记号置于内部,每个轴:axis.ticks.length=unit(-0.25,“cm”)调整
轴时会出现这种情况。记号。边距
可以控制标签和轴之间的距离。
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))
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
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))