自定义具有不同颜色的ggplot2轴标签

时间:2016-08-10 00:07:34

标签: r ggplot2 geom-bar

我有一个基本的条形图,我是从ggplot2创建的。 y变量包含正值和负值,大约一半的矢量值为负值。我想自定义轴标签,以便当相应的x因子的y值为负时,其标签为红色。这是一个可重复的例子:

#Create data
x <- c("a","b","c","d","e","f")
y <- c("10", "9","-10","11","-3","-15")
data <- data.frame(x, y)
data$y <- as.numeric(as.character(data$y))

data$category <- ifelse(as.numeric(data$y)<0, 0, 1)
data$category <- as.factor(data$category)

#Graph
library(cowplot) #theme
library(ggplot2)

ggplot(data, aes(x=x, y=y)) + 
  geom_bar(stat = "identity", aes(fill=category)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  theme(axis.text.x = element_text(colour = "black"))

enter image description here

我需要的是一种将“c”,“e”和“f”的标签颜色更改为我选择的颜色的方法。我尝试切换theme(aes(axis.text.x=element_text(colour=Air_pricier))),但这会产生错误。提前谢谢。

2 个答案:

答案 0 :(得分:40)

您可以为axis.text.x的{​​{1}}选项提供颜色矢量:

theme()

enter image description here

答案 1 :(得分:2)

我也收到@Mark Neal的评论中提到的警告消息;这让我很紧张。这是ggtext包的替代方法。您可以在<span> s中包装x轴的类别,并指定所需的颜色,然后在主题中使用element_markdown

library(ggtext)
library(tidyverse)

data %>%
  mutate(x.label = paste("<span style = 'color: ",
                         ifelse(y > 0, "black", "red"),
                         ";'>",
                         x,
                         "</span>", sep = ""),
         x.label = fct_reorder(x.label, as.character(x))) %>%
  ggplot(aes(x=x.label, y=y)) + 
  geom_bar(stat = "identity", aes(fill=category)) +
  theme(axis.text.x = element_markdown(angle = 45, hjust = 1))

https://create-react-app.dev/docs/making-a-progressive-web-app/