我正在尝试使用ggplot2在R中制作堆积条形图,但是,我无法重现我在网上找到的先前示例。
样本数据:
d <- data.frame(year = factor(sample(2010:2014, 400, replace=T)),
continent = factor(sample(c("EU", "US", "Asia"), 400, replace=T)),
gender = factor(sample(c("male", "female"), 400, replace=T)),
amount = sample(20:5000, 400, replace=T))
ggplot代码:
ggplot(data=d, aes(x=year, y=amount, fill=gender)) + geom_bar(stat="identity")
如果根据blog post by Christoph Herzog生成以下图表而无需手动排序源数据:
但是,我在不应用任何订购的情况下获得的实际结果是:
有没有人可以向我解释为什么会这样? ggplot2是否有变化,我无法找到?我忽略了什么吗?
更新:1
我尝试使用强制订单,但没有运气:
ggplot(data=d, aes(x=year, y=amount, fill=gender, order=as.numeric(row.names(d)))) +
geom_bar(stat="identity")
我正在使用ggplot2_2.2.1和R版本3.3.2。
更新:2
以下代码会产生未排序的结果,但有几个问题。
ggplot(data=d, aes(x=year, y=amount)) + stat_identity(geom = "bar", aes(fill=gender))
更新:3
在某种程度上,可以使用以下代码获得所需的结果:
ggplot(data=d, aes(x=year, y=amount, fill=gender, group = continent)) +
geom_bar(stat="identity")
但是,您需要对第二个参数进行分组以实现此目的这一事实并不适合我的目标应用程序。我正在寻找一个完全没有排序的图,其中只有行号决定了堆叠顺序。
答案 0 :(得分:0)
根据Q的更新3,OP正在寻找一个完全未排序的图,其中只有行号决定了堆叠顺序。
我相信这可以通过
来实现ggplot(data=d, aes(x=year, y=amount, fill=gender, group=row.names(d))) +
geom_col()
OP已在其更新3中使用continent
作为group
美学。此处,row.names(d)
返回的行号或行ID用于对数据进行分组。
geom_col()
是geom_bar(stat="identity")
版本2.2.0引入ggplot2
的快捷方式。
请注意,结果可能会有所不同,因为OP已省略set.seed()
到可重复创建样本数据。