Может быть, вы точно не улавливаете координату последней метки?Например, legend_last_label$grobs[[1]]$x
равно NULL
и должно возвращать 1npc
.Вот способ, которым вы можете добраться до него:
legend_last_label$grobs[[1]][["children"]][[1]][["children"]][[1]][["x"]]
#> [1] 1npc
# Overwrite it as you wish:
legend_last_label$grobs[[1]][["children"]][[1]][["children"]][[1]][["x"]] <- unit(-1, units = "cm")
Может быть, безопаснее использовать gPath
s каждого гроба, чтобы "поймать" их и затем отредактировать их с помощью editGrob
функция.Вот пример, примененный к вашему сюжету tester
:
g <- grid.force(ggplotGrob(tester)) # get all grobs and their components
grid.ls(g) # list the names of all grobs
Легенда где-то внизу, обозначенная как "guide-box.etc"
#> guide-box.11-5-11-5
#> legend.box.background.2-4-4-2
#> guides.3-3-3-3
#> background.1-7-7-1
#> title.2-6-2-2
#> guide.title.titleGrob.123
#> GRID.text.121
#> key-3-1-bg.4-2-4-2
#> key-3-1-1.4-2-4-2
#> key-3-2-bg.4-3-4-3
#> key-3-2-1.4-3-4-3
#> key-3-3-bg.4-4-4-4
#> key-3-3-1.4-4-4-4
#> key-3-4-bg.4-5-4-5
#> key-3-4-1.4-5-4-5
#> label-5-1.6-2-6-2
#> guide.label.titleGrob.126
#> GRID.text.124
#> label-5-2.6-3-6-3
#> guide.label.titleGrob.129
#> GRID.text.127
#> label-5-3.6-4-6-4
#> guide.label.titleGrob.132
#> GRID.text.130
#> label-5-4.6-5-6-5
#> guide.label.titleGrob.135
#> GRID.text.133
Ваш последний ярлыкупоминается как:
#> label-5-4.6-5-6-5
#> guide.label.titleGrob.135
#> GRID.text.133
Теперь нам нужно построить gPath
с для каждого гроба.Возможно, есть более простые способы, но вот один из способов:
# delete "layout::" from raw gPath & add grob name at the end
gpaths <- paste(gsub(pattern = "layout::",
replacement = "",
x = grid.ls(g, print = FALSE)$gPath),
grid.ls(g, print = FALSE)$name,
sep = "::")
Путь к тексту вашей метки:
gpaths[grepl("guide-box.*label-5-4.*GRID\\.text.*", gpaths)]
#> [1] "guide-box.11-5-11-5::guides.3-3-3-3::label-5-4.6-5-6-5::guide.label.titleGrob.135::GRID.text.133"
Итак, имея путь, мы можем отредактироватьgrob, то есть переместите метку влево:
g <- editGrob(grob = g,
gPath = gpaths[grepl("guide-box.*label-5-4.*GRID.text.*", gpaths)],
x = unit(-1, "cm"))
plot(g)
![enter image description here](https://i.stack.imgur.com/03wVX.png)
Кроме того, вы можете редактировать ширину и положение клавиши.Вот как отредактировать самый правый ключ:
g <- editGrob(grob = g,
gPath = gpaths[grepl("guide-box.*key-3-4-1.*", gpaths)],
x = unit(0.5, "cm"),
width = unit(1, "cm"))
plot(g)
![enter image description here](https://i.stack.imgur.com/IcpVN.png)
Кроме того, я думаю, вам следует заменить labels <- labels[1:length(labels)-1]
на labels <- labels[-length(labels)]
;в противном случае я получаю сообщение об ошибке из функции cut
при сборке d1930$brks