R 中 geom_text 中标签的条件标记和手动操作

问题描述 投票:0回答:1

谁能帮我弄清楚如何:

  1. 使用
    geom_text
    仅显示那些
    down
    up
    类别的标签(如何删除
    stable
    标签)
  2. 如何手动将负面标签更改为正面标签(从负面标签中删除减号)
  3. 如何有效地使用
    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()

任何帮助和建议将不胜感激。

r ggplot2 dplyr tidyverse geom-text
1个回答
0
投票
  1. 将它们过滤掉并为此预处理所有
    dat
  2. abs()
     中使用 
    geom_text()
  3. 与1相同

试试这个:

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

结果是:

© www.soinside.com 2019 - 2024. All rights reserved.