R语言 根据指定条件从ggplot图中删除axis.text.x

n53p2ov0  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(93)

我对自定义axis.text.x在图表上显示的内容感兴趣。举个例子,我有以下iris的代码。

iris %>% 
  mutate(rn = row_number()) %>% 
  mutate(flower = paste0(Species, " ", rn)) %>% 
  mutate(flower = fct_reorder(flower, Sepal.Length)) %>% 
  ggplot(aes(flower, Sepal.Length))+
  geom_col()+
  coord_flip()

这将根据数据按照Sepal.length的顺序创建每朵花的图形。我通过粘贴带有数据行数的类型为每朵花创建了一个唯一的名称,这样fct_reorder就可以完成它的工作了。
但是如果我只想让axis.text.x显示来自任何类型的花呢?比如维吉尼卡?这就是我想要的我猜如果你有一个专栏可以参考,它可能会起作用,但我正在努力寻找一种方法。

utugiqy6

utugiqy61#

您可以在缩放功能中设置标签和断点:

原始答复

iris_new <- iris %>% 
  mutate(rn = row_number()) %>% 
  mutate(flower = paste0(Species, " ", rn)) %>% 
  mutate(flower = fct_reorder(flower, Sepal.Length),
         flowlabs = ifelse(grepl("virginica",flower),as.character(flower),""))  

iris_new %>% 
  ggplot(aes(flower, Sepal.Length))+
  geom_col()+
  coord_flip()+
  scale_x_discrete(breaks = iris_new$flower, labels = iris_new$flowlabs)

编辑正如@stefan在评论中提到的,最好不要将数据解析为scale函数。修改了答案,使其React更好

iris_new %>% 
  ggplot(aes(flower, Sepal.Length))+
  geom_col()+
  coord_flip()+
  scale_x_discrete(labels = ~ if_else(grepl("^virg", .x), .x, ""))

请注意,由于您没有在每个断点处设置标签,因此需要同时定义断点和标签,如果您只是为所有断点设置新标签,则只需定义标签即可

相关问题