使用ggplot2以粗体突出显示各个轴标签

Ste*_*fan 9 indexing r ggplot2

我想以粗体突出显示各个轴标签.我知道@MrFlick 的这个答案,但我无法弄清楚如何做这个a)多个项目,以及b)是否可以使用标签的名称而不是项目的编号列表(或表达式).

这是一个示例数据集:

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))
Run Code Online (Sandbox Code Playgroud)

然后我根据一个特定的因子组合对我的标签进行排序,然后应该在一个图的多个面板上进行维护.在这里查看我之前的问题.

clone_order <- xx %>% subset(TREAT == "C"  & YEAR == "X") %>%
  arrange(-VALUE) %>% select(CLONE) %>% unlist()    
xx <- xx %>% mutate(CLONE = factor(CLONE, levels = clone_order))

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
  geom_bar(stat="identity", position="dodge") +
  facet_wrap(~TREAT)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我想大胆Clone A,B并且E.我相信这会以某种方式起作用,但我无法弄清楚如何.理想情况下,这将是巨大的,知道如何做到这一点一)使用列表/表达项目的数量,以及B)通过使用标签,如A,BE.

hrb*_*str 14

这是创建emboldening向量的通用方法:

colorado <- function(src, boulder) {
  if (!is.factor(src)) src <- factor(src)                   # make sure it's a factor
  src_levels <- levels(src)                                 # retrieve the levels in their order
  brave <- boulder %in% src_levels                          # make sure everything we want to make bold is actually in the factor levels
  if (all(brave)) {                                         # if so
    b_pos <- purrr::map_int(boulder, ~which(.==src_levels)) # then find out where they are
    b_vec <- rep("plain", length(src_levels))               # make'm all plain first
    b_vec[b_pos] <- "bold"                                  # make our targets bold
    b_vec                                                   # return the new vector
  } else {
    stop("All elements of 'boulder' must be in src")
  }
}

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
  geom_bar(stat="identity", position="dodge") +
  facet_wrap(~TREAT) +
  theme(axis.text.x=element_text(face=colorado(xx$CLONE, c("A", "B", "E"))))
Run Code Online (Sandbox Code Playgroud)


jdo*_*res 11

我不确定您是否可以按名称映射标签特征,但是通过调用以下位置绝对可以通过位置来实现theme:

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
  geom_bar(stat="identity", position="dodge") +
  facet_wrap(~TREAT) +
  theme(axis.text.x = element_text(face = c('bold', 'bold', 'plain', 'plain', 'bold')))
Run Code Online (Sandbox Code Playgroud)

请注意,列出的字体面axis.text.x与x轴标签(五个元素)的长度相同.这会产生:

在此输入图像描述


eip*_*i10 7

您可以创建一个命名的表达式向量(将文本转换为粗体)scale_x_discrete并用于parse=TRUE评估表达式:

ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) + 
    geom_bar(stat="identity", position="dodge") +
    facet_wrap(~TREAT) +
    scale_x_discrete(labels=c("A"=expression(bold(A)), "C"=expression(bold(C)),
                              "E"=expression(bold(E)), parse=TRUE))
Run Code Online (Sandbox Code Playgroud)

你可以用编程方式创建表达式向量,而不是输入它,但是这样做的方法就是现在逃避我.

在此输入图像描述