按照像ggplot Donut chart这样的指南,我试图在中间画一个带有标签的小型甜甜圈,以便稍后将它们放在地图上。
如果值达到某个阈值,我希望甜甜圈的填充变为红色。是否有可能用if_else实现(这是最自然的,但它不起作用)。
library(tidyverse)
df <- tibble(ID=c("A","B"),value=c(0.7,0.5)) %>% gather(key = cat,value = val,-ID)
ggplot(df, aes(x = val, fill = cat)) + scale_fill_manual(aes,values = c("red", "yellow"))+
geom_bar(position="fill") + coord_polar(start = 0, theta="y")
ymax <- max(df$val)
ymin <- min(df$val)
p2 = ggplot(df, aes(fill=cat, y=0, ymax=1, ymin=val, xmax=4, xmin=3)) +
geom_rect(colour="black",stat = "identity") +
scale_fill_manual(values = if_else (val > 0.5, "red", "black")) +
geom_text( aes(x=0, y=0, label= scales::percent (1-val)), position = position_dodge(0.9))+
coord_polar(theta="y") +
xlim(c(0, 4)) +
theme_void() +
theme(legend.position="none") +
scale_y_reverse() + facet_wrap(facets = "ID")
缩放填充手动值= if else ....此部分不起作用,错误说明:if_else错误(val> 0.5,&#34;红色&#34;,&#34;黑色&#34; ):object&#39; val&#39;未找到。这是我的错误,还是存在其他解决方案?
我也意识到我的代码不是最优的,最初聚集等待更多变量包含在图中,但是我没有将一个变量堆叠在另一个上面。现在一个变量应该足以表明完成的百分比。我意识到我的代码是多余的。你能救我一下吗?
答案 0 :(得分:3)
颜色问题的解决方案是先在数据中创建一个变量,然后用它来绘制图中的颜色:
df <- tibble(ID=c("A","B"),value=c(0.7,0.5)) %>% gather(key = cat,value = val,-ID) %>%
mutate(color = if_else(val > 0.5, "red", "black"))
p2 = ggplot(df, aes(fill=color, y=0, ymax=1, ymin=val, xmax=4, xmin=3)) +
geom_rect(colour="black",stat = "identity") +
scale_fill_manual(values = c(`red` = "red", `black` = "black")) +
geom_text( aes(x=0, y=0, label= scales::percent (1-val)), position = position_dodge(0.9))+
coord_polar(theta="y") +
xlim(c(0, 4)) +
theme_void() +
theme(legend.position="none") +
scale_y_reverse() + facet_wrap(facets = "ID")
结果将是: