谁能帮我弄清楚如何:
geom_text
仅显示那些 down
和 up
类别的标签(如何删除 stable
标签)hjust
将正标签推到条形的右侧,将负标签推到条形的左侧(我尝试了一些方法,但想知道是否有比逐个对所有数据执行此操作更好的方法)代码:
x <- LETTERS[1:11]
y <- c(9, 4, 6, 8, 5, 7, -9, -4, -6, -8, -5)
z <- seq(-1, 1, by = 0.2)
dat <- data.frame(x, y, z)
dat %>%
filter(x != "B") %>%
ggplot(aes(fct_reorder(x, y, .desc = T), y,
fill = ifelse(z > 0.7, "up",
ifelse(z < -0.6, "down", "stable")))) +
geom_col() +
scale_fill_manual("Color",
values = c("up" = "#5b3b71",
"down" = "#9a4054",
"stable" = "#b7c1bd")) +
geom_text(aes(label = paste0(y,"%")),
hjust = c(-1,-1,-1,-1,-1,1,1,1,1,1)) +
coord_flip() +
theme_void()
任何帮助和建议将不胜感激。
dat
。abs()
中使用
geom_text()
试试这个:
library(dplyr)
library(ggplot2)
library(forcats)
x <- LETTERS[1:11]
y <- c(9, 4, 6, 8, 5, 7, -9, -4, -6, -8, -5)
z <- seq(-1, 1, by = 0.2)
dat <- data.frame(x, y, z) |>
mutate(fill_col = ifelse(z > 0.7, "up",
ifelse(z < -0.6, "down", "stable")),
just_text = ifelse(z > 0, 1, 0)) |>
filter(x != "B")
dat %>%
ggplot(aes(fct_reorder(x, y, .desc = T), y,
fill = fill_col)) +
geom_col() +
scale_fill_manual("Color",
values = c("up" = "#5b3b71",
"down" = "#9a4054",
"stable" = "#b7c1bd")) +
geom_text(
data = dat |> filter(fill_col != "stable"),
aes(label = paste0(abs(y),"%"), hjust = just_text)) +
coord_flip() +
theme_void()
结果是: