如何根据指定条件在ggplot图中仅显示目标类别的axis.text.x
解决ggplot自定义轴文本仅显示特定类别标签的问题
针对你的需求,这里提供三种实用方法,以仅显示virginica(注:你代码里拼写的verginica是笔误,正确拼写为virginica)类别的轴标签为例:
方法一:仅保留目标类别标签,其余设为空
先预处理数据并保存,再通过scale_y_discrete的labels参数判断标签对应的物种,非目标类别的标签设为空字符串:
# 预处理数据 iris_processed <- iris %>% mutate(rn = row_number()) %>% mutate(flower = paste0(Species, " ", rn)) %>% mutate(flower = fct_reorder(flower, Sepal.Length)) # 绘制图表 ggplot(iris_processed, aes(flower, Sepal.Length)) + geom_col() + coord_flip() + scale_y_discrete(labels = function(x) { # 匹配每个标签对应的物种 species <- iris_processed$Species[match(x, iris_processed$flower)] # 仅保留virginica的标签,其余设为空 ifelse(species == "virginica", x, "") })
方法二:隐藏非目标类别标签(保持刻度位置)
通过theme将非目标类别的轴文本颜色设为透明,视觉上隐藏标签,但轴的刻度位置不变:
ggplot(iris_processed, aes(flower, Sepal.Length)) + geom_col() + coord_flip() + theme(axis.text.y = element_text( colour = ifelse(iris_processed$Species == "virginica", "black", "transparent") ))
方法三:完全移除非目标类别的刻度
如果希望轴上仅保留目标类别的刻度和标签,可使用scale_y_discrete的breaks参数,只筛选出virginica对应的标签:
ggplot(iris_processed, aes(flower, Sepal.Length)) + geom_col() + coord_flip() + scale_y_discrete(breaks = iris_processed$flower[iris_processed$Species == "virginica"])
内容的提问来源于stack exchange,提问作者Jeff Henderson
相关产品推荐
相关产品推荐

