我有以下数据框,想要绘制堆积区域图:
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
但忽略as.numeric()
aes(x=...
时,情节会变空。
有更好的方法吗?
答案 0 :(得分:1)
将b
作为一个因素。您还需要添加与group
美学相同的fill
美学。 (这告诉ggplot
如何在不同的因素级别之间连接点#34。
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。你的不是一个条形图,但原则是相同的。