【发布时间】:2016-04-05 23:32:49
【问题描述】:
我正在尝试使用 ggplot 制作水平堆叠条形图。以下是我的数据框中 300 个站点中三个站点的实际值。到目前为止,我使用从这些 previous questions 中提取的信息,我承认我可能还没有完全理解。
df <- data.frame(id=c("AR001","AR001","AR001","AR001","AR002","AR002","AR002","AR003","AR003","AR003","AR003","AR003"),
landuse=c("agriculture","developed","forest","water","agriculture","developed","forest","agriculture","developed","forest","water","wetlands"),
percent=c(38.77,1.76,59.43,0.03,69.95,0.42,29.63,65.4,3.73,15.92,1.35,13.61))
df
id landuse percent
1 AR001 agriculture 38.77
2 AR001 developed 1.76
3 AR001 forest 59.43
4 AR001 water 0.03
5 AR002 agriculture 69.95
6 AR002 developed 0.42
7 AR002 forest 29.63
8 AR003 agriculture 65.40
9 AR003 developed 3.73
10 AR003 forest 15.92
11 AR003 water 1.35
12 AR003 wetlands 13.61
str(df)
'data.frame': 12 obs. of 3 variables:
$ id : Factor w/ 3 levels "AR001","AR002",..: 1 1 1 1 2 2 2 3 3 3 ...
$ landuse: Factor w/ 5 levels "agriculture",..: 1 2 3 4 1 2 3 1 2 3 ...
$ percent: num 38.77 1.76 59.43 0.03 69.95 ...
df <- transform(df,
landuse.ord = factor(
landuse,
levels=c("agriculture","forest","wetlands","water","developed"),
ordered =TRUE))
cols <- c(agriculture="maroon",forest="forestgreen",
wetlands="gold", water="dodgerblue", developed="darkorchid")
ggplot(df,aes(x = id, y = percent, fill = landuse.ord, order=landuse.ord)) +
geom_bar(position = "stack",stat = "identity", width=1) +
coord_flip() +
scale_fill_manual(values = cols)
生成此图。
- 我想做的是对条形重新排序,以便它们按农业类别的值降序排列 - 在本例中,AR002 位于顶部,然后是 AR003,然后是 AR001。我尝试将 aes 的内容更改为
aes(x = reorder(landuse.ord, percent),但这消除了堆叠,并且似乎可能将每个土地利用类别的百分比相加:
- 我想按顺序排列,从左到右:农业、森林、湿地、水、开发。我尝试使用代码的
transform部分来做到这一点,它在图例中以正确的顺序排列,但不是在情节本身?
在此先感谢...根据对其他人问题的回答,我已经取得了很大的进步,但现在似乎卡在了这一点上!
【问题讨论】: