如何为一个多层次的因素制作分组的Barplot [英] How to Make a Grouped Barplot for a Factor with Many Levels

查看:187
本文介绍了如何为一个多层次的因素制作分组的Barplot的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

命名为'temp'的dataframe (下面)有三列(1)Canopy Index; (2)Under_tree;和(3)Open_Canopy。 Under_tree Open_Canopy 这两列是各有5个级别的因素。

 数据(温度)

Canopy_index Under_tree Open_Canopy
1 75林下草地
2 85垃圾草地
3 75垃圾草地
4 35垃圾草地
5 85 undergrowth Grass

'dataframe'temp'被重新格式化为以长格式命名为 df.melt (如下)以生成barplot,其中<​​strong> y轴表示为 Canopy_index x轴代表地形(第三列),其中五级两个条件分组(第二列 - Under_Open): (1)Under_tree;和(2)Open_Canopy。



问题



我想制作一张看起来像示例1(下面)(1)在Canopy下;和(2)打开Canopy



为了生成barplot,我试图使用ggplot;但是,结果似乎是错误的,因为每个栏的高度都是一样的(示例2)。总之,我不确定如何解决这个错误。



如果有人能够提供帮助,那么很多人会提前致谢。



将数据帧转换为长格式的代码:

  ##响应变量= y =冠层索引
##解释变量=下并打开
##重塑数据以产生一列,并打开

(reshape2)
library(ggplot2)

under< -factor(temp $ Under_tree)
open< -factor(temp $ Open_Canopy)

数据(df.melt)

df.melt< - melt(temp,id =Canopy_index)

colnames(df.melt)< -c Canopy_Index,Under_Open,地形)

Canopy_Index Under_Open地形
1 75欠树undergrowth
2 85 Under_tree乱窝
3 75 Under_tree乱窝
4 35 Under_tree垃圾
5 85 Under_tree林下植物

barplot的代码强>

  ##分组的barplot显示由under_tree和Open_Canopy分组的地形

ggplot(df.melt,aes(x =地形,y = Canopy_Index,fill = factor(Under_Open)))+
geom_bar(stat =identity,position =dodge)+
scale_fill_discrete(name =地形特征,
break = c(1,2),
labels = c(Open_Canopy,Under_tree))+
xlab(地形特征)+ ylab(Canopy索引)

示例(1):


$ b DATAFRAME(temp)



<$ p $结构(列表(Canopy_index = c(75,85,75,35,85,95,85,65,
75,95,75,95,85,75,85, 95,75,85,85,75,75,85,85,
65,85,75,85,95,95,85,55,75,95,75,95,95,65, 65,55,
95,85,85,45,85,85,35,95,85,85,35,85,45,85,85,85,
95,85,85, 75,85,75,65,75,65,85,45,55,95,75,95,
45,75,75,95,95, 85,75,75,55,75,85,
85,85,15,75,85,85,85,95,85,85,75,85,95,65,75,
95,55,75,85,85,95,95,55,85,75,75,85,85,85,85,55,
75,55,75,85,75,85,75,85,85,85,75,55,55,85,75,55,75,85,75,75,85,85,85,75,55,75,85,85,75,55,55,85,75,75,85,85,85, 85,75,85,75,95,25,95,95,25,75,
75,85,35,55,85, 85,85,95,
65,55,95,95,85,95,85,65,55,65,55,95,75,85,85,35,
75,75, 85,65,85,65,65,95,85,95,75,75,55,95,65,85,
65,15,35,55,95,15,15,75,65, 85,5,5,35,35,85,65,
45,35,65,65,75,65,15,75,65,45,25,65,85,45,85,75,
15,65,45,55,45, 15,45,75,65,75,65,35,95,65,35,35,
65,45,75,35,75,85,35,55,65,85,65,65, 85,55,15,75,
65,45,45,85,55,15,85,15,95,75,5,55,15,35,45,85,
65, 65岁,65岁,65岁,35岁,75岁,65岁,65岁,75岁,55岁,35岁,55岁,65岁,75岁, 65岁,55岁,75岁,15岁,55岁,65岁,75岁,55岁,55岁,45岁,75岁,25岁, 45,
95,55,75,45,25,35,55,15,15,75,35,55,55,65,45,65,
25,55,45,65, 65,25,25,65,45,95,55,25,55,85,45,85,
15,75,65,35,75,15,55,85,35,55,45, (c)(6L,5L,5L,5L,6L,4L,6L,
5L,5L,5L,4L) ,6L,3L,6L,4L,6L,4L,5L,6L,5L,5L,3L,5L,
6L,5L,5L,6L,4L,6L,5L,4L,4L,5L,4L ,5L,4L,6L,6L,4L,
4L,4L,4L,3L,4L,4L,4L,4L,4L,6L,5L,5L,6L,4L,6L,4L,
4L,6L,6L,6L,6L,6L ,6L,4L,5L,5L,4L,4L,4L,4L,5L,3L,
4L,5L,5L,5L,4L,4L,5L,6L,4L,4L,5L,4L,5L 6L,4L,4L,
4L,4L,5L,4L,6L,4L,4L,5L,4L,6L,5L,5L,4L,6L,5L,6L,
4L, 6L,6L,3L,5L,6L,6L,6L,5L,5L,3L,4L,4L,6L,
4L,3L,5L,6L,4L,2L,5L,5L,5L ,5L,6L,5L,4L,4L,4L,4L,
6L,5L,6L,6L,4L,6L,6L,4L,5L,4L,6L,5L,6L,6L,5L,6L ,
6L,4L,5L,4L,5L,4L,6L,5L,4L,6L,3L,3L,4L,4L,4L,4L,
3L,4L,5L,4L,5L ,4L,5L,6L,4L,5L,4L,4L,6L,4L,4L,6L,
6L,5L,5L,5L,4L,4L,6L,5L,5L,5L,4L,6L 3L,4L,5L,4L,
4L,5L,6L,5L,5L,3L,5L,6L,6L,5L,6L,6L,4L,4L,5L,5L,
4L ,5L,4L,5L,5L,4L,4L,5L,4L,3L,4L,5L,5L,3L,5L,5L,
5L,6L,4L,6L,4L,4L,5L,5L ,5L,5L,6L,2L,4L,4L,5L,4L,
4L,6L,4L,3L,5L,5L,5L,5L,5L,4L,4L,5L,6L,4L,4L,5L,
4L,5L,4L,4L,5L, 5L,6L,5L,3L,6L,5L,5L,6L,5L,6L,6L,
5L,4L,6L,6L,5L,4L,4L,5L,6L,5L,5L, 6L,6L,6L,6L,
5L,4L,5L,4L,6L,4L,5L,5L,5L,4L,2L,5L,5L,5L,6L,5L, 5L,5L,5L,5L,5L,6L,4L,3L,6L,5L,6L,6L,5L,6L,6L,4L,5L,5L, 6L,4L,4L,5L,4L,3L,3L,4L,
4L,3L,6L,4L,3L,6L,4L,5L,4L,4L,5L,5L,4L,4L, 4L,
4L,6L,5L),.Label = c(,Artificial_Surface,Bare_soil,
Grass,Litter,Undergrowth),class =factor ),Open_Canopy = structure(c(4L,
4L,4L,4L,4L,4L,4L,5L,4L,5L,6L,3L,4L,4L,4L,4L,4L,
4L,4L,4L,5L,4L,3L,4L,4L,4L,4L,4L,4L,6L,4L,4L,3L,
4L,4L,4L,6L,6L,4L,4L ,4L,4L,4L,4L,4L,4L,4L,3L,6L,
2L,6L,6L,4L,4L,4L,4L,4L,5L,4L, 6L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, $ b 5L,4L,4L,4L,4L,4L,4L,4L,4L,4L,3L,6L,4L,4L,4L,3L,
4L,3L,4L,4L,4L, 4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, 5L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, 6L,4L,4L,6L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, 4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,
4L,3L,4L,3L,4L,4L,4L,4L,4L,4L,5L,4L,3L,4L,4L,5L,
4L,2L,4L,4L,6L, 4L,4L,5L,4L,6L,6L,4L,4L,3L,3L,4L,
4L,5L,5L,2L,5L,2L,6L,6L,4L,4L,4L, 4L,4L,4L,4L,4L,4L,4L,6L,
6L,2L,4L,4L,4L,4L,4L,4L,3L,4L,3L,5L,5L,4L,4L, 4L,4L,4L,4L,5L,4L,4L,4L,4L, 4L,3L,4L,4L,4L,3L,4L,4L,4L,4L,4L,4L,4L,4L,3L,2L,
4L,6L,4L,4L,6L,5L,4L,4L,4L,4L,5L,4L,4L,6L,4L,4L,
2L,4L,5L,4L,4L, 5L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, 6L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L,4L, 4L,4L,4L,3L,4L,3L),.Label = c(,Artificial_Surface,
Bare_soil,Grass,Litter,Undergrowth factor)),.Names = c(Canopy_index,
Under_tree,Open_Canopy),row.names = c(1L,2L,3L,4L,5L,
6L, 7L,8L,9L,10L,11L,12L,13L,14L,15L,16L,17L,18L,
19L,20L,21L,22L,23L,24L,25L,26L,27L,28L,29L, 30L,31L,
32L,33L,34L,35L,36L,37L,38L,39L,40L,41L,42L,43L,44L,
45L,46L,47L,48L,49L,50L, 51L,52L,53L,54L,55L,56L,57L,
58L,59L,60L,61L,62L,63L,64L,65L,66L,67L,68L,69L,70L,
71L,72L,73L,74L,75L,76L,77L,78L, 79L,80L,81L,82L,83L,
84L,85L,86L,87L,88L,89L,90L,91L,92L,93L,94L,95L,96L, 101L,102L,103L,104L,105L,106L,107L,108L,
109L,110L,111L,112L,113L,114L,115L,116L,117L,118L,119L,
120L,121L, 122L,123L,124L,125L,126L,127L,128L​​,129L,130L,
131L,132L,133L,134L,135L,136L,137L,138L,139L,140L,141L, 143L,144L,145L,146L,147L,148L,149L,150L,151L,152L,
153L,154L,155L,156L,157L,158L,159L,160L,161L,162L,163L,
164L,165L,166L,167L,168L,169L,170L,171L,172L,173L,174L,
175L,176L,177L,178L,179L,180L,181L,182L,183L,184L,185L,
186L,187L,188L,189L,190L,191L,192L,193L,194L,195L,196L,
197L,198L,199L,200L,201L,202L,203L,204L,205L, 206L,207L,
208L,209L,210L,211L,212L,213L,214L,215L,216L,217L,218L,
219L,220L,221L,222L,223L,224L,225L,226L, 227L,228L,229L,
230L,231L,232L,233L,234L,235L,236L,237L,238L,239L,240L,$ b $ 241L,242L,243L,244L,245L,246L,247L, 248L,249L,250L,251L,
252L,253L,254L,255L,256L,257L,258L,259L,260L,261L,262L,
263L,264L,265L,266L,267L,268L, 269L,270L,271L,272L,273L,
274L,275L,276L,277L,278L,279L,280L,281L,282L,283L,284L,
285L,286L,287L,288L,289L, 290L,291L,292L,293L,294L,295L,
296L,297L,298L,299L,300L,301L,302L,303L,304L,305L,306L,308L,309L,310L, 311L,312L,313L,314L,315L,316L,317L,$ b $ 318L,319L,320L,321L,322L,323L,324L,325L,326L,327L,328L,$ b 329L,330L,331L, 332L,333L,334L,335L,336L,337L,338L,339L,$ b $ 340L,341L,342L,343L,344L,345L,346 L,347L,348L,349L,350L,
351L,352L,353L,354L,355L,356L,357L,358L,359L,360L,361L,
362L,363L),class =data。框架)


解决方案

假设您想绘制 Canopy_Index 为每个 Under_Open 地形首先:

  df.means<  - 聚合(Canopy_Index〜Under_Open +拓扑图,df.melt,平均数)

然后,使用您问题中的代码绘制 df.means

  ggplot(df.means,aes(x = Topography,y = Canopy_Index,fill = Under_Open))+ 
)geom_bar(stat =identity,position =dodge)+
scale_fill_discrete(name =Canopy Type,
labels = c(Under_tree=Canopy下,Open_Canopy= Open Canopy))+
xlab(地形特征)+ ylab(Canopy索引)

结果:



当前柱状图几乎全部位于同一高度的原因是,每个单元格覆盖多个值(

  df.max < -  aggregate(Canopy_Index〜Under_Open + Topography,df.melt,max)
#Under_Open地形Canopy_Index
#1 Under_tree Artificial_Surface 75
#2 Open_Canopy Artificial_Surface 95
#3 Under_tree Bare_soil 95
#4 Open_Canopy Bare_soil 95
#5 Under_tree Grass 95
#6 Open_Canopy草95
#7 Under_tree垃圾95
#8 Open_Canopy垃圾95
#9 Under_tree生长95
#10 Open_Canopy林下95


The dataframe named 'temp' (below) has three columns (1) Canopy Index; (2) Under_tree; and (3) Open_Canopy. The columns Under_tree and Open_Canopy are factors with 5 levels each.

         data(temp)

            Canopy_index  Under_tree Open_Canopy
          1           75 Undergrowth       Grass
          2           85      Litter       Grass
          3           75      Litter       Grass
          4           35      Litter       Grass
          5           85 Undergrowth       Grass

The dataframe 'temp' was reformatted to be in long format named df.melt (below) to produce a barplot where the y-axis is denoted as Canopy_index and the x-axis represents the factor Topography (3rd column) which has five levels grouped by two conditions (2nd column - Under_Open):(1) Under_tree; and (2) Open_Canopy.

Problem

I would like to produce a barplot that looks like example 1 (below) with a key for: (1) Under the Canopy; and (2) Open Canopy.

In order to produce the barplot, I attempted to used ggplot; however, the results appear to be erroneous because each bar is exactly the same height (example 2). In summary, I am unsure how to fix the error.

If anyone can help, then many thanks in advance.

Code to convert the dataframe into long format:

   ##response variable = y = Canopy Index
   ##explanatory variables = under and open
   ##Reshape the data to produce one column with under and open

     library(reshape2)
     library(ggplot2)

     under<-factor(temp$Under_tree)
     open<-factor(temp$Open_Canopy)

     data(df.melt)

     df.melt <- melt(temp, id="Canopy_index")

     colnames(df.melt)<-c("Canopy_Index", "Under_Open", "Topography")

             Canopy_Index Under_Open  Topography
           1           75 Under_tree Undergrowth
           2           85 Under_tree      Litter
           3           75 Under_tree      Litter
           4           35 Under_tree      Litter
           5           85 Under_tree Undergrowth

Code for barplot

 ##Grouped barplot showing the topography grouped by under_tree and Open_Canopy

 ggplot(df.melt, aes(x=Topography, y=Canopy_Index,      fill=factor(Under_Open)))+
 geom_bar(stat="identity",position="dodge")+
 scale_fill_discrete(name="Topographical Feature",
                  breaks=c(1, 2),
                  labels=c("Open_Canopy", "Under_tree"))+
 xlab("Topographical Feature")+ylab("Canopy Index")

EXAMPLE (1):

EXAMPLE (2)

DATAFRAME (temp)

       structure(list(Canopy_index = c(75, 85, 75, 35, 85, 95, 85, 65, 
       75, 95, 75, 95, 85, 75, 85, 95, 75, 85, 85, 85, 75, 75, 85, 85, 
       65, 85, 75, 85, 95, 95, 85, 55, 75, 95, 75, 95, 95, 65, 65, 55, 
       95, 85, 85, 45, 85, 85, 35, 95, 85, 85, 35, 85, 45, 85, 85, 85, 
       95, 85, 85, 75, 85, 35, 85, 85, 65, 65, 85, 45, 55, 95, 75, 95, 
       45, 75, 75, 95, 95, 85, 75, 95, 75, 65, 85, 75, 75, 55, 75, 85, 
       85, 85, 15, 75, 85, 85, 85, 95, 85, 85, 75, 85, 85, 95, 65, 75, 
       95, 55, 75, 85, 85, 85, 95, 55, 85, 75, 75, 85, 85, 85, 85, 55, 
       75, 55, 75, 85, 75, 85, 85, 75, 85, 75, 95, 25, 95, 95, 25, 75, 
       75, 85, 35, 55, 85, 65, 85, 75, 85, 85, 85, 75, 65, 85, 85, 95, 
       65, 55, 95, 95, 85, 95, 85, 65, 55, 65, 55, 95, 75, 85, 85, 35, 
       75, 75, 85, 65, 85, 65, 65, 95, 85, 95, 75, 75, 55, 95, 65, 85, 
       65, 15, 35, 55, 95, 15, 15, 75, 65, 85, 5, 5, 35, 35, 85, 65, 
       45, 35, 65, 65, 75, 65, 15, 75, 65, 45, 25, 65, 85, 45, 85, 75, 
       15, 65, 45, 55, 45, 15, 45, 75, 65, 75, 65, 35, 95, 65, 35, 35, 
       65, 45, 75, 35, 75, 85, 35, 55, 65, 85, 65, 65, 85, 55, 15, 75, 
       65, 45, 45, 85, 55, 15, 85, 15, 95, 75, 5, 55, 15, 35, 45, 85, 
       65, 65, 65, 65, 25, 85, 35, 55, 65, 75, 5, 45, 65, 15, 75, 55, 
       65, 55, 35, 75, 65, 65, 85, 35, 65, 55, 75, 15, 55, 65, 75, 55, 
       85, 35, 55, 55, 25, 75, 15, 55, 75, 75, 65, 55, 45, 75, 25, 45, 
       95, 55, 75, 45, 25, 35, 55, 15, 15, 75, 35, 55, 55, 65, 45, 65, 
       25, 55, 45, 65, 65, 25, 25, 65, 45, 95, 55, 25, 55, 85, 45, 85, 
       15, 75, 65, 35, 75, 15, 55, 85, 35, 55, 45, 85, 45, 65, 55, 75, 
       65, 85), Under_tree = structure(c(6L, 5L, 5L, 5L, 6L, 4L, 6L, 
       5L, 5L, 5L, 4L, 6L, 3L, 6L, 4L, 6L, 4L, 5L, 6L, 5L, 5L, 3L, 5L, 
       6L, 5L, 5L, 6L, 4L, 6L, 5L, 4L, 4L, 5L, 4L, 5L, 4L, 6L, 6L, 4L, 
       4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 6L, 5L, 5L, 6L, 4L, 6L, 4L, 
       4L, 6L, 6L, 6L, 6L, 6L, 6L, 4L, 5L, 5L, 4L, 4L, 4L, 4L, 5L, 3L, 
       4L, 5L, 5L, 5L, 4L, 4L, 5L, 6L, 4L, 4L, 5L, 4L, 5L, 6L, 6L, 4L, 
       4L, 4L, 5L, 4L, 6L, 4L, 4L, 5L, 4L, 6L, 5L, 5L, 4L, 6L, 5L, 6L, 
       4L, 3L, 6L, 6L, 6L, 3L, 5L, 6L, 6L, 6L, 5L, 5L, 3L, 4L, 4L, 6L, 
       4L, 3L, 5L, 6L, 4L, 2L, 5L, 5L, 5L, 5L, 6L, 5L, 4L, 4L, 4L, 4L, 
       6L, 5L, 6L, 6L, 4L, 6L, 6L, 4L, 5L, 4L, 6L, 5L, 6L, 6L, 5L, 6L, 
       6L, 4L, 5L, 4L, 5L, 4L, 6L, 5L, 4L, 6L, 3L, 3L, 4L, 4L, 4L, 4L, 
       3L, 4L, 5L, 4L, 5L, 4L, 5L, 6L, 4L, 5L, 4L, 4L, 6L, 4L, 4L, 6L, 
       6L, 5L, 5L, 5L, 4L, 4L, 6L, 5L, 5L, 5L, 4L, 6L, 3L, 4L, 5L, 4L, 
       4L, 5L, 6L, 5L, 5L, 3L, 5L, 6L, 6L, 5L, 6L, 6L, 4L, 4L, 5L, 5L, 
       4L, 5L, 4L, 5L, 5L, 4L, 4L, 5L, 4L, 3L, 4L, 5L, 5L, 3L, 5L, 5L, 
       5L, 6L, 4L, 6L, 4L, 4L, 5L, 5L, 5L, 5L, 6L, 2L, 4L, 4L, 5L, 4L, 
       4L, 6L, 4L, 3L, 5L, 5L, 5L, 5L, 5L, 4L, 4L, 5L, 6L, 4L, 4L, 5L, 
       4L, 5L, 4L, 4L, 5L, 5L, 6L, 5L, 3L, 6L, 5L, 5L, 6L, 5L, 6L, 6L, 
       5L, 4L, 6L, 6L, 5L, 4L, 4L, 5L, 6L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 
       5L, 4L, 5L, 4L, 6L, 4L, 5L, 5L, 5L, 4L, 2L, 5L, 5L, 5L, 6L, 5L, 
       5L, 5L, 4L, 6L, 4L, 3L, 6L, 5L, 6L, 6L, 5L, 6L, 6L, 4L, 5L, 5L, 
       6L, 5L, 5L, 4L, 5L, 5L, 6L, 5L, 6L, 4L, 4L, 5L, 4L, 3L, 3L, 4L, 
       4L, 3L, 6L, 4L, 3L, 6L, 4L, 5L, 4L, 4L, 5L, 5L, 4L, 4L, 4L, 4L, 
       4L, 6L, 5L), .Label = c("", "Artificial_Surface", "Bare_soil", 
       "Grass", "Litter", "Undergrowth"), class = "factor"),      Open_Canopy = structure(c(4L, 
       4L, 4L, 4L, 4L, 4L, 4L, 5L, 4L, 5L, 6L, 3L, 4L, 4L, 4L, 4L, 4L, 
       4L, 4L, 4L, 5L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 3L, 
       4L, 4L, 4L, 6L, 6L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 6L, 
       2L, 6L, 6L, 4L, 4L, 4L, 4L, 4L, 5L, 4L, 6L, 4L, 5L, 4L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 4L, 
       5L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 6L, 4L, 4L, 4L, 3L, 
       4L, 3L, 4L, 4L, 4L, 3L, 4L, 4L, 6L, 3L, 4L, 4L, 4L, 4L, 6L, 6L, 
       4L, 4L, 4L, 4L, 4L, 5L, 4L, 4L, 5L, 4L, 4L, 2L, 4L, 5L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
       4L, 4L, 6L, 4L, 6L, 6L, 4L, 4L, 6L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 
       4L, 3L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
       4L, 4L, 6L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 
       4L, 3L, 4L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 4L, 3L, 4L, 4L, 5L, 
       4L, 2L, 4L, 4L, 6L, 4L, 4L, 5L, 4L, 6L, 6L, 4L, 4L, 3L, 3L, 4L, 
       4L, 5L, 5L, 2L, 5L, 2L, 6L, 6L, 4L, 4L, 4L, 4L, 4L, 5L, 4L, 6L, 
       6L, 2L, 4L, 4L, 6L, 4L, 4L, 4L, 3L, 4L, 3L, 5L, 5L, 4L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 5L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 4L, 3L, 
       6L, 5L, 5L, 4L, 3L, 4L, 5L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 2L, 
       4L, 6L, 4L, 4L, 6L, 5L, 4L, 4L, 4L, 4L, 5L, 4L, 4L, 6L, 4L, 4L, 
       2L, 4L, 5L, 4L, 4L, 4L, 5L, 4L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 6L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 4L, 6L, 4L, 4L, 4L, 4L, 
       4L, 4L, 4L, 4L, 4L, 4L, 3L, 4L, 3L), .Label = c("",      "Artificial_Surface", 
       "Bare_soil", "Grass", "Litter", "Undergrowth"), class =    "factor")), .Names = c("Canopy_index", 
        "Under_tree", "Open_Canopy"), row.names = c(1L, 2L, 3L, 4L, 5L, 
        6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 
       19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 
       32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 
       45L, 46L, 47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 
       58L, 59L, 60L, 61L, 62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 
       71L, 72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 
       84L, 85L, 86L, 87L, 88L, 89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 
       97L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L, 
      109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 117L, 118L, 119L, 
      120L, 121L, 122L, 123L, 124L, 125L, 126L, 127L, 128L, 129L, 130L, 
      131L, 132L, 133L, 134L, 135L, 136L, 137L, 138L, 139L, 140L, 141L, 
      142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L, 150L, 151L, 152L, 
      153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L, 161L, 162L, 163L, 
      164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 172L, 173L, 174L, 
      175L, 176L, 177L, 178L, 179L, 180L, 181L, 182L, 183L, 184L, 185L, 
      186L, 187L, 188L, 189L, 190L, 191L, 192L, 193L, 194L, 195L, 196L, 
      197L, 198L, 199L, 200L, 201L, 202L, 203L, 204L, 205L, 206L, 207L, 
      208L, 209L, 210L, 211L, 212L, 213L, 214L, 215L, 216L, 217L, 218L, 
      219L, 220L, 221L, 222L, 223L, 224L, 225L, 226L, 227L, 228L, 229L, 
      230L, 231L, 232L, 233L, 234L, 235L, 236L, 237L, 238L, 239L, 240L, 
      241L, 242L, 243L, 244L, 245L, 246L, 247L, 248L, 249L, 250L, 251L, 
      252L, 253L, 254L, 255L, 256L, 257L, 258L, 259L, 260L, 261L, 262L, 
      263L, 264L, 265L, 266L, 267L, 268L, 269L, 270L, 271L, 272L, 273L, 
      274L, 275L, 276L, 277L, 278L, 279L, 280L, 281L, 282L, 283L, 284L, 
      285L, 286L, 287L, 288L, 289L, 290L, 291L, 292L, 293L, 294L, 295L, 
      296L, 297L, 298L, 299L, 300L, 301L, 302L, 303L, 304L, 305L, 306L, 
      307L, 308L, 309L, 310L, 311L, 312L, 313L, 314L, 315L, 316L, 317L, 
      318L, 319L, 320L, 321L, 322L, 323L, 324L, 325L, 326L, 327L, 328L, 
      329L, 330L, 331L, 332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, 
      340L, 341L, 342L, 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 
      351L, 352L, 353L, 354L, 355L, 356L, 357L, 358L, 359L, 360L, 361L, 
      362L, 363L), class = "data.frame")

解决方案

Assuming you want to plot means of Canopy_Index for each Under_Open, Topography cell, you can form means first:

df.means <- aggregate(Canopy_Index ~ Under_Open + Topography, df.melt, mean)

Then, plot df.means using the code from your question:

ggplot(df.means, aes(x=Topography, y=Canopy_Index, fill=Under_Open)) +
  geom_bar(stat="identity", position="dodge") +
  scale_fill_discrete(name="Canopy Type",
         labels=c("Under_tree"="Under Canopy", "Open_Canopy"="Open Canopy")) +
  xlab("Topographical Feature") + ylab("Canopy Index")

Result:

The reason why the bars are currently almost all of the same height is that you overlay multiple values per cell (as pointed out in the comments by Marijn Stevering), effectively plotting the max:

df.max <- aggregate(Canopy_Index ~ Under_Open + Topography, df.melt, max)
# Under_Open         Topography Canopy_Index
# 1   Under_tree Artificial_Surface           75
# 2  Open_Canopy Artificial_Surface           95
# 3   Under_tree          Bare_soil           95
# 4  Open_Canopy          Bare_soil           95
# 5   Under_tree              Grass           95
# 6  Open_Canopy              Grass           95
# 7   Under_tree             Litter           95
# 8  Open_Canopy             Litter           95
# 9   Under_tree        Undergrowth           95
# 10 Open_Canopy        Undergrowth           95

这篇关于如何为一个多层次的因素制作分组的Barplot的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆