首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件更改` `ggplot`‘标签颜色

根据条件更改` `ggplot`‘标签颜色
EN

Stack Overflow用户
提问于 2022-09-24 13:11:19
回答 1查看 103关注 0票数 1

我有一个关于根据条件改变geom_text & geom_label的颜色的问题。

预期输出

  • 数据标签为2021年的color = bluecolor = grey为2020年的
  • 缺口标签为negative时为红色,当为color = grey时为绿色

数据

代码语言:javascript
复制
data <-  tibble(Factor = c("A", "B", "A", "B"),
   Score = c(90, 85, 85, 90),
   Year = c("2020", "2020", "2021", "2021"))

数据转换

代码语言:javascript
复制
   df_2 = data %>% 
     pivot_wider(names_from = Year, names_prefix = "Year", values_from = Score) %>% 
     mutate(gap = Year2021 - Year2020) %>% 
     select(Factor, gap)

代码语言:javascript
复制
data %>% 
  left_join(df_2) %>% 
  ggplot(aes(x = Factor, y = Score, fill = Year)) +
  geom_col(position='dodge') +
  geom_text(aes(label=Score), 
            position=position_dodge(width = 0.9), 
            vjust=-0.40) +
  geom_label(aes(y = 100, label = ifelse(Year == 2021, gap, NA_character_)), na.rm = TRUE) +
  scale_y_continuous(limits = c(0,105))
  theme_minimal()

预期输出

  • 85 & 90 = blue为2021年,90 & 85 = grey为2020
  • -5 = red5 = green
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-24 13:30:15

第二个选项是对文本和条形颜色使用手动缩放。对于标签,我们可以使用ggnewscale包,它允许为相同的美学多个尺度。这样,我们可以添加第二个填充比例:

代码语言:javascript
复制
library(ggplot2)
library(ggnewscale)

ggplot(dat, aes(x = Factor, y = Score, fill = Year)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = Score, color = Year),
    position = position_dodge(width = 0.9),
    vjust = -0.40
  ) +
  scale_color_manual(aesthetics = c("fill", "color"), values = c("2021" = "blue", "2020" = "grey")) +
  ggnewscale::new_scale_fill() +
  geom_label(aes(y = 100, label = ifelse(Year == 2021, gap, NA_character_), fill = gap > 0), na.rm = TRUE) +
  scale_fill_manual(values = c("FALSE" = "red", "TRUE" = "green")) +
  scale_y_continuous(limits = c(0, 105)) +
  theme_minimal()

数据

代码语言:javascript
复制
data <- data.frame(
  Factor = c("A", "B", "A", "B"),
  Score = c(90, 85, 85, 90),
  Year = c("2020", "2020", "2021", "2021")
)

library(dplyr)
library(tidyr)

df_2 <- data %>%
  pivot_wider(names_from = Year, names_prefix = "Year", values_from = Score) %>%
  mutate(gap = Year2021 - Year2020) %>%
  select(Factor, gap)

dat <- data %>%
  left_join(df_2)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73837483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档