如何在堆积面积图上重新排序 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。你的不是条形图,但原理是相同的。
我有以下数据框,想绘制堆积面积图:
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。你的不是条形图,但原理是相同的。