Используя face_wrap, как я могу создать легенду с цветом и формой в ggplot2 - PullRequest
0 голосов
/ 28 мая 2020

Я использую face_wrap, чтобы представить свои результаты в четырех разных группах (графики, соответствующие переменной «Tipo»). У каждой группы своя форма, и внутри каждой группы я использую разные цвета, чтобы обозначить разные типы результатов (в данном случае это другой тип болезни «Энфермедад»). Таким образом, я не могу назначить «форму» и «цвет» одной и той же переменной, а также объединить оба столбца не работает в моем случае. В общем, мне удалось назначить четыре разные формы каждой группе и 16 разных цветов, но мне не удалось создать легенду с цветом и формой. Заранее спасибо!

Таблица, которую я использую, выглядит так:

 Enfermedad               Casos     Año        Tipo
 Amebiasis intestinal      100      1998       Parasitaria
 Amebiasis intestinal      250      1999       Parasitaria
 Fiebre tifoidea           300      1998       Bacteriana
 Fiebre tifoidea           225      1999       Bacteriana
 Hepatitis vírica A         50      1998       Vírica
 Hepatitis vírica A         33      1999       Vírica

Вот мой код:

library(RColorBrewer)

EnfermGastro<- read_excel("...")

colourCount = length(unique(EnfermGastro$Enfermedad))
getPalette = colorRampPalette(brewer.pal(16, "Set1"))

ggplot(EnfermGastro, aes(x=Año,y=Casos,shape=Tipo, colour=Enfermedad)) +

geom_point(size=2.5) +

scale_shape_manual(values =c(16, 1, 18, 8)) +

scale_fill_manual(values= getPalette(colourCount)) +

scale_x_continuous( breaks=c(1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,
                           2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018)) +
scale_y_continuous(labels=comma) +

theme_bw() +
theme(axis.line=element_line(colour = "black"),
      panel.grid.major.y = element_line(colour="grey75", linetype="dotted"),
      panel.grid.major.x = element_line(colour="grey75", linetype="dotted"),
      panel.border=element_blank(),
      legend.background=element_rect(fill="grey80", colour="black"),
      legend.title = element_text(size= 10),
      legend.text = element_text(size= 8),
      legend.position="bottom") +

   facet_wrap(~Tipo, scale= "free")

enter image description here

1 Ответ

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

Хорошо, вот возможное решение, не лучшее, потому что я хотел иметь только 4 разных формы, один тип формы в каждом фасете, но, по крайней мере, мне удалось создать легенду с цветом и формой в ggplot2. Итак, я повторил те же 4 формы для 16 различных болезней. Таким образом, я присвоил «форму» и «цвет» переменной Enfermedad (болезнь) и использовал scale_shape_manual. Опять же, это не совсем то, что я хотел, поэтому, если у кого-то есть лучшее решение, я бы очень приветствовал его!

ggplot(EnfermGastro, aes(x=Año,y=Casos, shape=Enfermedad, colour=Enfermedad)) +

geom_point(size=2.5) +

scale_shape_manual(values =rep.int(c(16, 1, 18, 8),times=4)) +

scale_fill_manual(values= getPalette(colourCount)) +

scale_x_continuous( breaks=c(1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,
                        2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018)) +
scale_y_continuous(labels=comma) +

theme_bw() +
theme(axis.line=element_line(colour = "black"),
       panel.grid.major.y = element_line(colour="grey75", linetype="dotted"),
       panel.grid.major.x = element_line(colour="grey75", linetype="dotted"),
       panel.border=element_blank(),
       legend.background=element_rect(fill="grey80", colour="black"),
       legend.title = element_text(size= 10),
       legend.text = element_text(size= 8),
       legend.position="bottom") +

  facet_wrap(~Tipo, scale= "free")

enter image description here

...