首页 > 解决方案 > Scale_fill_manual 不产生由条件指定的颜色填充

问题描述

1:没有问题

假设我下载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") 

geom_bar接下来,我用(注意)绘制这些数据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()

从下图中scale_fill_manual可以使用TRUE/FALSE值: 在此处输入图像描述

2:问题

现在假设我下载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") 

然后我用geom_jitter(注意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()

但是,请注意在这种情况下对于TRUE/FALSEscale_fill_manual不起作用:在此处输入图像描述

请解释为什么scale_fill_manual第 1 部分有效,但在第 2部分无效?

非常感谢!

标签: rggplot2annotationsgeom-bargeom-point

解决方案


尝试更改fillcolor条形可以填充,而抖动中的点可以着色:

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"))

输出:

在此处输入图像描述


推荐阅读