ggplot2: переместить (переместить) легенду, чтобы не блокировать графическое поле - PullRequest
0 голосов
/ 25 мая 2020

enter image description here

Как сдвинуть легенду на несколько точек (ширину линии прямоугольника графика) влево и вниз?

Задача: Я хочу сделать фон легенды полупрозрачным, но чтобы он не перекрывал рамку графика.

(красная рамка - для лучшей визуализации проблемы)

Используйте код :

image + theme(
    panel.background     = element_rect(fill = "white", color = NA),
    panel.border         = element_rect(fill = NA, color = "black", size = 2),
    panel.grid.major     = element_line(color = "#00000040", linetype = 3),

    axis.text            = element_text(size = 10),
    axis.title           = element_text(size = 12),
    axis.title.x         = element_text(margin = margin(t = 10)),
    axis.title.y         = element_text(margin = margin(r = 10)),

    legend.key           = element_rect(fill = NA, color = NA),
    legend.background    = element_rect(fill = "#ffffff80", color = "red", size = 1),
    legend.justification = c(1, 1),
    legend.position      = c(1, 1),
    legend.title         = element_text(size = 10, color = "black"),

    plot.title           = element_text(hjust = 0.5),
)

Ответы [ 2 ]

1 голос
/ 25 мая 2020

Если вы хотите, чтобы поле легенды было выровнено по внешнему краю границы графика, вам необходимо настроить legend.box.margin так, чтобы верхний край имел то же значение, что и ширина линии, определенной в legend.background.

Примерных данных не было, поэтому я создал несколько:

library(ggplot2)

x  <- seq(0, 2 * pi, length.out = 100)
df <- data.frame(x = c(x, x), y = c(-cos(x), sin(x)), 
                 group = rep(c("data1", "data2"), each = 100))

image <- ggplot(df, aes(x, y)) + 
  geom_line(aes(colour = group)) + 
  scale_colour_manual(values = c("red", "black"))

image + theme(
    panel.background     = element_rect(fill = "white", color = NA),
    panel.border         = element_rect(fill = NA, color = "black", size = 2),
    panel.grid.major     = element_line(color = "#00000040", linetype = 3),

    axis.text            = element_text(size = 10),
    axis.title           = element_text(size = 12),
    axis.title.x         = element_text(margin = margin(t = 10)),
    axis.title.y         = element_text(margin = margin(r = 10)),

    legend.key           = element_rect(fill = NA, color = NA),
    legend.background    = element_rect(fill = "#ffffff80", color = "red", size = 1),
    legend.justification = c(1, 1),
    legend.position      = c(1, 1),
    legend.title         = element_text(size = 10, color = "black"),
    legend.box.margin    = margin(1, 0, 0, 0),

    plot.title           = element_text(hjust = 0.5)
)

Создано 25.05.2020 представителем пакет (v0.3.0)

0 голосов
/ 25 мая 2020

нашел!

legend.box.margin    = margin(t = 2, r = 2),
...