微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ggplot2:facet_grid 中 x 轴标签的条件格式

如何解决ggplot2:facet_grid 中 x 轴标签的条件格式

第一次发帖,如有违规请见谅。

数据(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 年 2 月 3 日创建

有关更多示例,请参阅 https://github.com/wilkelab/ggtext#markdown-in-theme-elements

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。