在没有基础数据的ggplot2中格式化特定的轴标签

时间:2018-02-02 11:29:43

标签: r ggplot2

如果轴标签包含特定文字,我会尝试将它们设为粗体。我试图对一个也是操纵我的数据的函数的输出的情节这样做,所以我的输入数据和输出中的标签顺序之间不再存在直接关系。因此添加theme(axis.text.y = element_text(face = ifelse(levels(df$category) == "xxx", "bold", "plain")))不起作用(它将错误的标签变为粗体)。

作为一个具体的例子,如果我的虹膜种类只有this box plot花瓣长度作为对象,如果我不知道顺序,是否可以添加一个将“setosa”变为粗体的图层物种会出现在?

更新:一个可重现的例子:

library(tidyverse)
library(rlang)

test <- tribble(
    ~AreaName, ~Value,
    "London",   1,
    "New York", 5,
    "Paris",    3
)

compare_areas <- function(data, area, value) {

    area <- enquo(area)
    value <- enquo(value)

    newLevels <- data[order(data[[quo_text(value)]], decreasing = TRUE), ][[quo_text(area)]]

    print(newLevels)


    data[[quo_text(area)]] <- factor(data[[quo_text(area)]], levels = newLevels)
    print(data)
    p <- ggplot(data, aes_string(x = quo_text(area), 
                                             y = quo_text(value))) +
        coord_flip() +
        geom_col()

    return(p)
}


compare_areas(data = test,
              area = AreaName,
              value = Value)

Plot output。例如,我想让巴黎大胆,但我不知道如何订购等级。

2 个答案:

答案 0 :(得分:1)

您必须使用 df$category == "xxx" 。当您应用bold时,您会获得与plain中的行数一样多的dflibrary(ggplot2) ggplot(iris, aes(Species, Petal.Length)) + geom_boxplot() + theme(axis.text.x = element_text(face = ifelse(levels(iris$Species) == "setosa", "bold", "plain"))) 值。

iris

enter image description here

length(ifelse(iris$Species == "setosa", "bold", "plain")) [1] 150 length(ifelse(levels(iris$Species) == "setosa", "bold", "plain")) [1] 3 数据集相同:

enum

答案 1 :(得分:0)

我会猜测并假设你所拥有的只是ggplot对象本身,即在这之后:

library(ggplot2)
g1 <- ggplot(iris, aes(Species, Petal.Length)) +
    geom_boxplot()

你只有g1。由于用于渲染绘图的数据存储在g1中,因此您可以根据@ Oliver的答案建立如下:

g1 + theme(axis.text.x = element_text(face = 
    ifelse(levels(g1$data$Species) == "setosa", "bold", "plain")))