library(tidyverse)
library(patchwork)
dt <- diamonds[1:1000, ]
众所周知,在ggplot2中,对于分类型变量,我们可以通过将其转换为factor类型,并通过设置其levels控制其在坐标轴的顺序。
p1 <- dt %>%
ggplot(aes(x = carat, y = cut, color = cut)) +
geom_point() +
labs(title = "修改levels前")
cut_levels <- c("Premium", "Good", "Very Good", "Fair", "Ideal")
p2 <- dt %>%
mutate(across(cut, ~ factor(.x, levels = cut_levels))) %>%
ggplot(aes(x = carat, y = cut, color = cut)) +
geom_point() +
labs(title = "修改levels后")
p1 + p2
但是这样会导致一个问题:因为在y-axis中,数值从小到大是从下向上排序的,在我的levels中,"Premium"排在前面(序号最小),所以它排在最下面。但如果我们想要让需要最小的排在最上面(从小到大对应从上往下),我们可以把levels的顺序反过来。
p3 <- dt %>%
mutate(across(cut, ~ factor(.x, levels = rev(cut_levels)))) %>%
ggplot(aes(x = carat, y = cut, color = cut)) +
geom_point() +
labs(title = "修改levels后+levels反序")
p2 + p3
将levels反序后,虽然确实如我们所愿,在y-axis中序号从小到大对应变量从上到下排列,但是同时产生了一个新的问题:在legend中变量的排列也反了过来。此时我们需要让legend的排列也同样反过来。
p4 <- dt %>%
mutate(across(cut, ~ factor(.x, levels = rev(cut_levels)))) %>%
ggplot(aes(x = carat, y = cut, color = cut)) +
geom_point() +
guides(color = guide_legend(reverse = T)) +
labs(title = "修改levels后+levels反序+legend反序")
p3 + p4
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。