首页 > 解决方案 > ggplot中带有填充的类别顺序

问题描述

我已经运行了这段代码:

#setup
library(tidyverse)
library(skimr)
library(scales)

#import data
tuesdata <- tidytuesdayR::tt_load('2021-05-25')
records <- tuesdata$records

records_tt <- records %>% 
  mutate(track = factor(track), 
         type = factor(type))

#let's create a boxplot
records_tt %>% 
  ggplot(aes(x=record_duration, y=track, fill=type)) + 
  geom_boxplot(alpha=0.6) + 
  theme_minimal() + 
  scale_x_continuous(labels = comma) +
  labs(x = "Record duration", y = "") +
  theme(
    axis.title.x = element_text(
      margin = margin(t = 15)),
    legend.title = element_blank())

这给了我这个情节:

马里奥赛车剧情

我有三个问题:

  1. 什么是ggplot用来决定将哪个级别type放置在顶部(即为什么它当前绘制three lap在顶部和single lap底部)?
  2. 如何在不更改图例键顺序的情况下翻转显示顺序(因为单列在三个之上是有意义的)?
  3. 如何重新排序从(独立于)track的最低平均值到最高平均值的值,而不是当前显示的默认反向字母顺序?record_durationtype

标签: rggplot2dplyr

解决方案


  • 对于问题 2:这是一个解决方案,借用这个解决方案geom_boxplot:使用以下行切换到的调用:
geom_boxplot(alpha=0.6, position=position_dodge2(reverse = T)) +
  • 对于问题3:这是一个解决方案:
records_tt %>% 
  group_by(track) %>% 
  mutate(mean_duration = mean(record_duration)) %>% 
  ggplot(aes(x = record_duration, y = reorder(track, -mean_duration), fill = type)) + 
  geom_boxplot(alpha=0.6, position=position_dodge2(reverse = T)) +
  theme_minimal() + 
  scale_x_continuous(labels = comma) +
  labs(x = "Record duration", y = "") +
  theme(
    axis.title.x = element_text(
      margin = margin(t = 15)),
    legend.title = element_blank())


推荐阅读