ggplot2: линии + точки с белой заливкой в ​​сюжете и легенде? - PullRequest
0 голосов
/ 07 января 2019

Я хочу создать график с пакетом ggplot2, который объединяет линии и точки. Точки должны иметь цвета и формы в соответствии с групповым индикатором. Необходимо создать легенду, которая отображает цвета и формы в соответствии с сюжетом.

Эта часть работала нормально. Однако все точки должны иметь белую заливку , и я не могу найти правильный код для этого.

Поиск в Google предлагает использовать fill = "white", но это не работает.

Рассмотрим следующие примерные данные и график:

library("ggplot2")

# Example data
df <- data.frame(y = 1:100,
                 x = 1:100,
                 group = as.factor(c(rep(1, 33), rep(2, 33), rep(3, 34))))

# Create plot --> fill = "white" doesnt work
ggplot(df, aes(x = x, y = y)) + 
  geom_line(aes(colour = factor(group, labels = c("a", "b", "c")))) +
  geom_point(aes(colour = factor(group, labels = c("a", "b", "c")),
                 shape = factor(group, labels = c("a", "b", "c"))),
             fill = "white") +              ##### This line is not working #####
  theme(legend.title = element_blank())

enter image description here

Вопрос: Как можно заполнить точки этого графика белым (как на сюжете, так и в легенде)?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Фигуры по умолчанию, используемые ggplot2 , имеют только цвет: чтобы получить цвет и заливка, вы должны использовать формы точек от 21 до 25. Затем настройка fill = "white" будет работать:

library(ggplot2)

df <- data.frame(
  y = 1:10, x = 1:10,
  group = factor(rep(1:3, c(3, 3, 4)), labels = letters[1:3])
)

ggplot(df, aes(x = x, y = y, colour = group)) +
  geom_line() +
  geom_point(aes(shape = group), fill = "white", size = 3) +
  theme(legend.title = element_blank()) +
  scale_shape_manual(values = 20 + seq_along(unique(df$group)))

0 голосов
/ 07 января 2019

Вы можете использовать scale_shape_discrete для установки solid = FALSE:

ggplot(df, aes(x = x, y = y)) + 
  geom_line(aes(colour = factor(group, labels = c("a", "b", "c")))) +
  scale_shape_discrete(solid = F) +
  geom_point(aes(colour = factor(group, labels = c("a", "b", "c")),
                 shape = factor(group, labels = c("a", "b", "c")))) +              
theme(legend.title = element_blank())

enter image description here

...