ggplot: использование факторов для определения цвета, формы и заливки (проблема с заливкой / цветом) - PullRequest
1 голос
/ 13 апреля 2020

У меня есть следующее:

set.seed(100)
df <- data.frame(
  lng    = runif(n=20, min=5,  max=10),
  lat    = runif(n=20, min=40, max=50),
  year   = rep(c("2001","2002","2003","2004"), each=5),
  season = sample(c("spring", "autumn"), 10, replace = T),
  info   = sample(c("yes","no"), 10, replace = T)
  )

Который может быть нанесен на график:

ggplot() +
  geom_point(data=df,
             aes(x     = lng,
                 y     = lat,
                 color = year,
                 shape = season),
             size=3)

Для производства:

plot with current code

Отлично. Но я хочу, чтобы красные контуры на фигурах были info == "yes".

Желаемый результат был бы:

desired output

Не сделано с использованием реальных данных, только для демонстрационных целей. Сделано в powerpoint.

По общему признанию, это похоже на этот вопрос , но не совсем.

Я рад разделить df, используя filter, если проще, чем два + geom_points()

Большое спасибо

Джим

1 Ответ

3 голосов
/ 13 апреля 2020

Ниже приведено быстрое решение (не лучшее), которое заключается в использовании другой шкалы, а ниже я использую размер в качестве шкалы, а затем guides(), чтобы вручную указать форму, которая будет отображаться в легенде. вам нужно сначала нарисовать большие красные фигуры, а затем нарисовать их так, чтобы они выглядели как контур:

ggplot() +
geom_point(data=subset(df,info=="yes"),
aes(x=lng,y=lat,shape = season,size=info),col="red") + 
scale_size_manual(values=3.6)+
geom_point(data=df,
             aes(x     = lng,
                 y     = lat,
                 color = year,
                 shape = season),
             size=3)+
guides(size = guide_legend(override.aes = list(shape = 1)))

enter image description here

Вы можете изменить легенду для формы, играя с опциями в руководстве ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...