1: AUCUN PROBLÈME

Supposons que je télécharge storm_econ_dmg.csv:

fileUrl <- "https://raw.githubusercontent.com/MichaelSodeke/DataSets/main/storm_health_dmg.csv"
download.file(fileUrl, destfile="storm_health_dmg.csv", method = "curl", mode="wb")
df1 <- read_csv("storm_health_dmg.csv") 

Ensuite, je trace ces données avec geom_bar (notez fill=(max.fatal == 583)):

p1 <- ggplot(df1, aes(x=reorder(state, max.fatal), y=max.fatal, fill=(max.fatal == 583) ))
p1 <- p1 + geom_bar(stat="identity")
p1 <- p1 + scale_fill_manual(values=c("TRUE"="seagreen3", "FALSE"="grey80"))
p1 <- p1 + coord_flip() + theme(legend.position="none")
srch <- df1$max.fatal > 50
p1 <- p1 + geom_text(data=df1[srch,], aes(label=evtype), angle=0, hjust=1.1, vjust=0.3, nudge_y=-0.1, size=2.5, fontface="bold")
p1 <- p1 + geom_text(data=df1[srch,], aes(label=max.fatal), angle=0, hjust=-1.3, vjust=0.3, nudge_y=0.1, size=2.5, fontface="bold")
p1 <- p1 + theme(panel.background = element_rect(fill = "white"),
         axis.line.x.bottom=element_line(colour="black"),
             axis.line.y.left=element_line(colour = "black"))
p1 %>% print()

À partir de l'image ci-dessous, scale_fill_manual fonctionne avec les valeurs TRUE / FALSE : entrez la description de l'image ici

2: PROBLÈME

Disons maintenant que je télécharge tornado_dmg.csv:

fileUrl <- "https://raw.githubusercontent.com/MichaelSodeke/DataSets/main/tornado_dmg.csv"
download.file(fileUrl, destfile="tornado_dmg.csv", method = "curl", mode="wb")
df2 <- read_csv("tornado_dmg.csv") 

Je trace ensuite ces données avec geom_jitter (notez fill=(f == 5)):

p2 <- ggplot(df2, aes(x=bgn.date, y=path.area, fill=(f == 5) ))
p2 <- p2 + geom_jitter(stat="identity", size=1)
p2 <- p2 + scale_fill_manual(values=c("TRUE"="red", "FALSE"="grey80"))
p2 %>% print()

Cependant, notez que scale_fill_manual ne fonctionne pas dans cette situation pour les valeurs TRUE / FALSE : entrez la description de l'image ici

Veuillez expliquer pourquoi scale_fill_manual fonctionne dans la partie 1 mais pas dans la partie 2 ?

Merci beaucoup!

0
Michael Šòdéké 24 oct. 2020 à 03:34

2 réponses

Meilleure réponse

Essayez de remplacer fill par color. Les barres peuvent être remplies, tandis que les points comme ceux de la gigue peuvent être colorés:

library(ggplot2)
#Data
fileUrl <- "https://raw.githubusercontent.com/MichaelSodeke/DataSets/main/tornado_dmg.csv"
df2 <- read.csv(fileUrl) 
#Code
ggplot(df2, aes(x=bgn.date, y=path.area, color=(f == 5) ))+
  geom_jitter(stat="identity", size=1)+
  scale_color_manual(values=c("TRUE"="red", "FALSE"="grey80"))

Production:

enter image description here

2
Duck 24 oct. 2020 à 00:45

J'ai adoré ce problème. C'est l'un de ceux que vous passez beaucoup de temps à essayer de résoudre pour constater que la réponse était juste devant vous.

Le problème est que vous avez utilisé fill pour geom_point. Si vous souhaitez changer la couleur des points, vous devez utiliser color ou colour (et la correspondance scale_*_manual). Par conséquent, votre code serait:

p2 <- ggplot(df2, aes(x=bgn.date, y=path.area, colour=(f == 5) ))
p2 <- p2 + geom_jitter(stat="identity", size=1)
p2 <- p2 + scale_colour_manual(values=c("TRUE"="red", "FALSE"="grey80"))
p2 %>% print()

Ou, comme je l'ai fait, ce qui je pense est un peu moins encombrant:

ggplot(df2, aes(x=bgn.date, y=path.area, colour=(f == 5) ))+
  geom_point()+
  scale_fill_manual(values=c("seagreen3", "grey80"))+
  theme_classic()

J'ai utilisé geom_point, mais je ne sais pas à quoi cela ressemblerait car tout le graphique ne s'est pas chargé à temps. Peut-être que ça n'a pas l'air aussi bien.

1
Érico Patto 24 oct. 2020 à 11:02