根据值ggplot2重新排列堆叠条形图中的变量

时间:2019-03-01 16:50:11

标签: r ggplot2 geom-bar

已更新示例数据:

mydata <- read.table(header=TRUE, text="
Item    Value   Site
                     A  96  site1
                     B  1   site1
                     C  2   site1
                     A  1   site2
                     B  62  site2
                     A  19  site3
                     B  1   site3
                     C  11  site3
                     D  9   site3
                     ")

我要做的是绘制堆积的条形图,并对每个站点对项目变量进行不同的排序,并按值列对其进行排序。因此,对于每个站点,具有最大百分比值的项目位于堆叠栏的底部,然后是第二个最大百分比值,依此类推。但是,我尝试了不同的方法,并且很难使用value列按堆积的条形进行排列。

使用解决方案进行编辑: 按照上面标记为答案的链接,使用geom_bar分别绘制每个条形,并添加重新排序功能-aes(fill = reorder(Item,+ Value))

3 个答案:

答案 0 :(得分:1)

为此,我通常依靠# ["<td class='test'><a class='test' href=...", # 0 # "<td class='test'>A</td>", # 1 # "<td class='test'><a class='test' href=...", # 2 # "<td class='test'>B</td>", # 3 # "<td class='test'><a class='test' href=...", # 4 # "<td class='test'>None</td>", # 5 Insert "<td class='test'>None</td>" # "<td class='test'><a class='test' href=...", # 6 # "<td class='test'>C</td>", # 7 # "<td class='test'><a class='test' href=...", # 8 # "<td class='test'>F</td>", # 9 # "<td class='test'><a class='test' href=...", # 10 # "<td class='test'>None</td>", # 11 Insert <td class='test'>None</td>" # "<td class='test'><a class='test' href=...", # 12 # "<td class='test'>X</td>"] # 13 软件包,尤其是forcats

fct_reorder

其中给出以下内容:

reordered plot

答案 1 :(得分:1)

这将为您服务

ggplot(data=my_data, aes(x=site, y=percentage, fill=reorder(substrate, percentage))) +
  geom_bar(stat="identity", position="stack")

通过在f​​ill参数中使用reorder命令。

答案 2 :(得分:0)

我认为forcats是一个很棒的方法,但是在我们拥有它之前-或当您只想使用不带库的base R时,this更像是传统方法:

mydata$substrate <- factor(mydata$substrate, levels = unique(mydata$substrate[order(mydata$percentage)]))

ggplot(data=mydata, aes(x=site, y=percentage), fill= Substrate) + 
  geom_bar(stat="identity",aes(fill=substrate))

enter image description here