我有一个基本的条形图,我是从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"))
Run Code Online (Sandbox Code Playgroud)
我需要的是一种将"c","e"和"f"的标签颜色更改为我选择的颜色的方法.我试过切换,theme(aes(axis.text.x=element_text(colour=Air_pricier)))但这产生了一个错误.提前致谢.
这可能最终成为一个expression或一个call问题,但我试图有条件地格式化单个轴标签.
在下面的示例中,我想有选择地加粗其中一个轴标签:
library(ggplot2)
data <- data.frame(labs = c("Oranges", "Apples", "Cucumbers"), counts = c(5, 10, 12))
ggplot(data = data) +
geom_bar(aes(x = labs, y = counts), stat="identity")`
Run Code Online (Sandbox Code Playgroud)

有类似的问题在这里,但解决方案涉及theme和element_text.我试图直接使用轴标签.
我可以手动执行此操作,如下所示:
breaks <- levels(data$labs)
labels <- breaks
labels[2] <- expression(bold("Cucumbers"))
ggplot(data = data) +
geom_bar(aes(x = labs, y = counts), stat="identity") +
scale_x_discrete(label = labels, breaks = breaks)
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试通过索引而不是输入"Cucumbers"来做到这一点,我会收到以下错误:
breaks <- levels(data$labs)
labels <- breaks
labels[2] <- expression(bold(labels[2]))
ggplot(data = data) +
geom_bar(aes(x …Run Code Online (Sandbox Code Playgroud) 问题和解决方案改编的问题:使用ggplot2以粗体突出显示各个轴标签
我想根据满足标准选择性地证明水平轴标签的合理性.所以从上面的问题和答案中借鉴我已经建立了一个例子:
require(ggplot2)
require(dplyr)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X", "Y"), each=20),
CLONE=rep(c("A", "B", "C", "D", "E"), each=4, 2),
TREAT=rep(c("T1", "T2", "T3", "C"), 10),
VALUE=sample(c(1:10), 40, replace=T))
# Simple plot with factors on y axis
ggplot(xx, aes(x = VALUE, y=CLONE, fill=YEAR)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~TREAT)
Run Code Online (Sandbox Code Playgroud)
好的,所以我从上面的问题+答案中采用了函数来生成一个理由的向量:
# Modify to control justification
colorado2 <- function(src, boulder) {
if (!is.factor(src)) src <- factor(src)
src_levels <- levels(src)
brave <- boulder %in% src_levels
if (all(brave)) {
b_pos <- purrr::map_int(boulder, ~which(.==src_levels))
b_vec <- rep(0.2, length(src_levels))
b_vec[b_pos] <- …Run Code Online (Sandbox Code Playgroud)