ggplot2:facet_grid 中 x 轴标签的条件格式
ggplot2: Conditional formatting of x axis label in facet_grid
首先post如有冒犯请见谅
数据 (russ_defensive) 看起来像这样
russ_defensive dataframe
此代码旨在创建 facet_grid 堆叠柱状图,这些柱状图有条件地由大写字母填充,并且 axis.text.x 颜色根据行业是否处于防御状态而设置为红色或黑色
library(dplyr)
library(ggplot2)
chart_foo <- ggplot(data = russ_defensive, aes(x = industry)) +
facet_grid(~ sector, space = "free", scales="free") +
geom_bar(stat="count") + aes(fill = capitalisation) +
theme(axis.text.x = element_text(angle = 90, color = ifelse(russ_defensive$defensive_industries == "N", "red", "black")))
大约一半的行业是非防御性的(因此 russ_defensive$defensive_industries 是“N”)但是此代码只会将其中一个标签变为红色(参见 here)并给出以下错误:
Warning message:
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.
是否有一个简单的修复/替代方法来根据数据集的列有条件地格式化标签?
感谢您的帮助,如果可重现的数据集有用,请告诉我。
好吧,正如警告告诉您的那样,不建议使用矢量化主题输入来选择轴文本颜色(尽管许多人仍然尝试)。我相信这也是 ggtext
包背后的动机之一,您可以在其中使用 markdown 来风格化您的文本。下面,您将找到一个带有标准数据集的示例,我希望它能很好地转化为您的数据集。我们只是有条件地对某些 x 轴类别应用着色。
library(ggplot2)
library(ggtext)
#> Warning: package 'ggtext' was built under R version 4.0.3
df <- transform(mtcars, car = rownames(mtcars))[1:10,]
red_cars <- sample(df$car, 5)
df$car <- ifelse(
df$car %in% red_cars,
paste0("<span style='color:#FF0000'>", df$car, "</span>"),
df$car
)
ggplot(df, aes(car, mpg)) +
geom_col() +
theme(axis.text.x = element_markdown(angle = 90))
由 reprex package (v1.0.0)
创建于 2021-02-03
有关更多示例,请参阅 https://github.com/wilkelab/ggtext#markdown-in-theme-elements
首先post如有冒犯请见谅
数据 (russ_defensive) 看起来像这样
russ_defensive dataframe
此代码旨在创建 facet_grid 堆叠柱状图,这些柱状图有条件地由大写字母填充,并且 axis.text.x 颜色根据行业是否处于防御状态而设置为红色或黑色
library(dplyr)
library(ggplot2)
chart_foo <- ggplot(data = russ_defensive, aes(x = industry)) +
facet_grid(~ sector, space = "free", scales="free") +
geom_bar(stat="count") + aes(fill = capitalisation) +
theme(axis.text.x = element_text(angle = 90, color = ifelse(russ_defensive$defensive_industries == "N", "red", "black")))
大约一半的行业是非防御性的(因此 russ_defensive$defensive_industries 是“N”)但是此代码只会将其中一个标签变为红色(参见 here)并给出以下错误:
Warning message:
Vectorized input to `element_text()` is not officially supported.
Results may be unexpected or may change in future versions of ggplot2.
是否有一个简单的修复/替代方法来根据数据集的列有条件地格式化标签?
感谢您的帮助,如果可重现的数据集有用,请告诉我。
好吧,正如警告告诉您的那样,不建议使用矢量化主题输入来选择轴文本颜色(尽管许多人仍然尝试)。我相信这也是 ggtext
包背后的动机之一,您可以在其中使用 markdown 来风格化您的文本。下面,您将找到一个带有标准数据集的示例,我希望它能很好地转化为您的数据集。我们只是有条件地对某些 x 轴类别应用着色。
library(ggplot2)
library(ggtext)
#> Warning: package 'ggtext' was built under R version 4.0.3
df <- transform(mtcars, car = rownames(mtcars))[1:10,]
red_cars <- sample(df$car, 5)
df$car <- ifelse(
df$car %in% red_cars,
paste0("<span style='color:#FF0000'>", df$car, "</span>"),
df$car
)
ggplot(df, aes(car, mpg)) +
geom_col() +
theme(axis.text.x = element_markdown(angle = 90))
由 reprex package (v1.0.0)
创建于 2021-02-03有关更多示例,请参阅 https://github.com/wilkelab/ggtext#markdown-in-theme-elements