Один из вариантов для редактирования конкретного grobs в ggplot Grob даются в одном из постов здесь. Он включает в себя следующий путь через длинные списки в списках, чтобы добраться до соответствующего гроба. Иногда легче (хотя, может быть, и незначительно) редактировать соответствующие грыбы, используя функции редактирования grid
.
library(ggplot2)
library(grid)
# The plot
bplot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, group = Species,
shape = Species,lty = Species)) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = F, color = "black") +
theme_minimal() +
theme(legend.key.width = unit(1.5, "cm"),
legend.key.height = unit(1, "cm"),
legend.key = element_rect(colour = "grey50", size = .5))
# Get the plot grob
g = ggplotGrob(bplot)
# Get a list of the grobs
grid.ls(grid.force(g))
Просмотрите список грызунов. Грубы, которые мы хотим изменить, относятся к нижней части списка - с именами, начинающимися с «ключа». Есть три группы из трех-трех групп, потому что в легенде есть три ключа. В каждой группе есть три grobs:
ключ-3-1-bg.4-2-4-2
ключ-3-1-1.4-2-4-2
ключ-3 -1-2.4-2-4-2
GRID.segments.819
Первый фон - никакого интереса здесь.
Второй относится к точке - мы хотим отредактировать ее вертикальное положение.
Третий относится к grob, который содержит дочерний элемент - GRID.segments - сегменты линии. Мы хотим отредактировать вертикальное положение сегмента линии.
В команде editGrob()
, gPath
перечисляет Grob быть отредактирован, но grep=TRUE
означает, что регулярные выражения можно использовать, и global=TRUE
означает, что все матчи будут затронуты. Таким образом, для каждого редактирования требуется только одна команда.
# Edit the 'key' grobs
# Move the point up a little
g = editGrob(grid.force(g), gPath("key-[1-9]-1-1"), grep = TRUE, global = TRUE,
y = unit(0.6, "npc"))
# Move the line segment down a little
g = editGrob(grid.force(g), gPath("GRID.segments"), grep = TRUE, global = TRUE,
y0 = unit(0.3, "npc"), y1 = unit(0.3, "npc"))
# Draw it
grid.newpage()
grid.draw(g)

попробовать 'legend.key.width = блок (1,5, "см")' –
legend.key.width контролирует ширину фона легенды и не было полезно в этом случае. – collnell
legend.key.width управляет шириной фона ключа легенды. Чем шире ключи, тем больше вы видите линию, и, следовательно, типы линий читаемы. Разве это не то, что вы хотели? Если вы хотите отделить фигуру от типа линии, но с одной меткой, я думаю, вам нужно будет вникать в структуру участка grob. Я уверен, что это можно сделать. –