如何在ggplot中反转箱线图顺序?当前After显示于Before之前
在ggplot中反转箱线图的类别顺序
很简单,有几种常用的方法可以解决这个问题,核心就是强制指定你想要的类别顺序:
方法1:修改数据中的因子水平(推荐,一劳永逸)
如果你的分类变量(比如叫time)是字符型,先把它转换成因子,并且明确指定Before在前、After在后的顺序:
# 调整数据中的因子水平 df$time <- factor(df$time, levels = c("Before", "After")) # 绘制箱线图 ggplot(df, aes(x = time, y = your_value_column)) + geom_boxplot()
这样后续再用这个变量绘图时,都会遵循你设定的顺序。
方法2:在ggplot中直接指定轴的顺序(无需修改原始数据)
如果不想改动原始数据,可以在绘图时通过scale_x_discrete()的limits参数直接定义顺序:
ggplot(df, aes(x = time, y = your_value_column)) + geom_boxplot() + scale_x_discrete(limits = c("Before", "After"))
特殊情况:横向箱线图(用了coord_flip())
如果你的箱线图是横向的(翻转了坐标轴),需要调整y轴的顺序,把scale_x_discrete换成scale_y_discrete:
ggplot(df, aes(x = your_value_column, y = time)) + geom_boxplot() + scale_y_discrete(limits = c("Before", "After")) + coord_flip()
为什么会出现这个问题?
ggplot默认会按字母顺序排列字符型变量,或者按因子的原始水平顺序排列。因为After的首字母A在B前面,所以默认会先显示它。我们上面的方法就是强制覆盖这个默认规则。
内容的提问来源于stack exchange,提问作者Farhan Ishrak
相关产品推荐
相关产品推荐

