我有两个分面图,并且当给定变量取 NA 或 0 的值时,希望轴文本为灰色。这目前适用于单个图,但是当我分面时,文本颜色与条形值不匹配. 请参阅下面的代表:
# create df
text <-
" country domain var_name perc color
A 'domain c Val2 NA grey
A 'domain c' Val1 NA grey
A 'domain c' Val3 0.01670 orange
A 'domain c' Val8 0.00000 grey
A 'domain c' Val9 NA grey
A 'domain c' Val11 0.02510 orange
A 'domain c' Val19 0.01890 orange
A 'domain d' Val16 0.04840 purple
A 'domain a' Val5 0.00776 darkolivegreen4
A 'domain a' Val6 0.02390 darkolivegreen4
A 'domain a' Val7 0.00247 darkolivegreen4
A 'domain a' Val10 0.03840 darkolivegreen4
A 'domain a' Val13 0.02490 darkolivegreen4
A 'domain a' Val18 NA grey
A 'domain b' Val4 0.01630 navy
A 'domain b' Val14 0.01610 navy
A 'domain b' Val12 0.05180 navy
A 'domain b' Val17 0.01770 navy
A 'domain b' Val15 0.03550 navy
B 'domain c' Val2 0.01440 orange
B 'domain c' Val1 NA grey
B 'domain c' Val3 0.02590 orange
B 'domain c' Val8 0.00000 grey
B 'domain c' Val9 NaN grey
B 'domain c' Val11 0.02900 orange
B 'domain c' Val19 0.00000 grey
B 'domain d' Val16 0.00261 purple
B 'domain a' Val5 0.10900 darkolivegreen4
B 'domain a' Val6 0.00702 darkolivegreen4
B 'domain a' Val7 0.01330 darkolivegreen4
B 'domain a' Val10 0.00861 darkolivegreen4
B 'domain a' Val13 0.06050 darkolivegreen4
B 'domain a' Val18 0.07770 darkolivegreen4
B 'domain b' Val4 0.00797 navy
B 'domain b' Val14 0.05230 navy
B 'domain b' Val12 0.04290 navy
B 'domain b' Val17 0.03190 navy
B 'domain b' Val15 0.06940 navy"
tbl <- read.table(text = text, header = T, fill = T)
# overwrite coord_polar function
cp <- coord_polar(theta = "x")
cp$is_free <- function() TRUE
# plot
p <-
ggplot(tbl, aes(x = forcats::as_factor(var_name), y = perc)) +
cp +
geom_bar(stat = "identity", aes(fill = color)) +
scale_y_continuous(labels = scales::label_percent()) +
scale_fill_identity(name = "Domain") +
facet_grid(. ~ country, scales = "fixed") +
theme_bw() +
theme(aspect.ratio = 1,
strip.text = element_text(size = 16),
axis.title = element_text(size = 18),
title = element_text(size = 20),
axis.text.x = element_text(colour = tbl$color, face = "bold"),
legend.text = element_text(size = 14))
p
这产生了这个图像:
请注意,对于 B 国,当该 var 的数量明显非零时,Var18 是灰色的。这是因为 A 国的价值为 0。
我想避免使用 Grid::,但是非常感谢任何关于如何克服这个问题的建议!


