限制 ggplot2 轴的因素数量

Limiting the number of factors a ggplot2 axis

我想在 ggplot2 中绘制一个数字 v/s 因子图,但我 运行 遇到了以下问题: 因子变量有 26 个水平,因此 X 轴显得非常混乱。我怎样才能限制我的绘图只显示 26 个级别中的 9 个级别?

目前,这是我正在尝试的代码:

ggplot(flt.fin,aes(`AirportName`,`Departure Delay`, color = `AircraftType`)) + geom_bar(stat = "identity") + scale_x_discrete(breaks = c(1:9),limits = c(levels(flt.fin$AirportName[1:9])))

我不太熟悉 scale_x_discrete 中的参数是如何工作的,所以这部分可能没有任何意义

OP,您有一些选择,具体取决于您的因素的结构。您的轴可能是一个因素,因此设置限制在这里不起作用。最直接的方法是根据您要显示的元素预先简单地过滤您的数据。这是一个简单的例子:

set.seed(8675309)
df <- data.frame(
  name=LETTERS,
  delay=sample(5:50, 26, replace=T)
)

library(ggplot2)
ggplot(df, aes(name, delay)) + geom_col(width=0.5)

要过滤该数据集以仅显示特定级别,您可以预先过滤:

names_of_interest <- c("A", "D", "E", "F", "Z", "Y")
  
df %>% dplyr::filter(name %in% names_of_interest) %>%
  ggplot(aes(name, delay)) + geom_col(width=0.5)

或者,您可以根据 x 轴因子水平的数字位置进行过滤。为此,您需要首先确保 x 轴被分解,然后您可以使用 levels(your_factor) 作为向量来指定如何过滤。这是另一个例子:

df$name <- factor(df$name)

df %>% dplyr::filter(name %in% levels(df$name)[4:15]) %>%
  ggplot(aes(name, delay)) + geom_col(width=0.5)