如何在堆积面积图上重新排序 x 轴

How to reorder the x axis on a stacked area plot

我有以下数据框,想绘制堆积面积图:

library(ggplot2)
set.seed(11)
df <- data.frame(a = rlnorm(30), b = as.factor(1:10), c = rep(LETTERS[1:3], each = 10))

ggplot(df, aes(x = as.numeric(b), y = a, fill = c)) + 
    geom_area(position = 'stack') +
    theme_grey() +
    scale_x_discrete(labels = levels(as.factor(df$b))) +
    theme(axis.text.x = element_text(angle = 90, hjust = 1))

我系统上的结果图如下所示:

不幸的是,x 轴似乎没有出现。我想绘制 df$b 旋转的值,以便它们不重叠,最终我想以特定方式对它们进行排序(还没有那么远,但我会接受任何建议)。

此外,根据 ?factor(),使用 as.numeric() 和一个因子并不是最好的方法。当我调用 ggplot 但为 aes(x=... 省略了 as.numeric() 时,该图为空。

有更好的方法吗?

留下 b 作为一个因素。您还需要添加与 fill 美学相同的 group 美学。 (这告诉 ggplot 如何 "connect the dots" 在不同的因子水平之间。)

ggplot(df, aes(x = b, y = a, fill = c, group = c)) + 
    geom_area(position = 'stack') +
    theme(axis.text.x = element_text(angle = 90, hjust = 1))

至于顺序,x轴将按照因子水平的顺序排列。要更改轴的顺序,只需更改因子水平的顺序即可。 reorder() 如果您将其基于数字列(或数字列的函数),则效果很好。对于任意顺序,只需在 factor 调用中直接指定级别的顺序,例如:df$b = factor(df$b, levels = c("1", "5", "2", ...) 有关更多示例,请参阅 r-faq Order bars in ggplot。你的不是条形图,但原理是相同的。