R中的分组频率分布图

时间:2014-04-21 11:53:34

标签: r plot

我有一个数据集,其中蝴蝶种类为行,并且它们以不同的列为食的植物科属种的数量。我试图在R中获得频率图,但在脚本中遇到了问题。然而,我可以用SPSS和excel绘制它。我想在这个特定的集合中使用R.非常感谢。

我的数据集具有以下形式。

   Butterfly species  #host families  #host genera  #host species
1  xxxxxxxxx                      xx            xx             xx
2  xxxxxxxxx                      xx            xx             xx
   ...

如果有人可以帮我解决这个问题,那将会非常有帮助。

1 个答案:

答案 0 :(得分:2)

正如评论所说,你需要发布一个可重复的例子。这假设每种蝴蝶物种有一行。

# generate reproducible example
set.seed(1)
df <- data.frame(Butterfly=LETTERS[1:10],
                 Families=sample(1:20,10,replace=T),
                 Genera=sample(1:20,10,replace=T),
                 Species=sample(1:20,10,replace=T))

library(ggplot2)
library(reshape2)
gg <- melt(df,id="Butterfly",value.name="Freq", variable.name="Type")
ggplot(gg, aes(x=Butterfly, y=Freq, fill=Type))+
  geom_bar(stat="identity")+
  facet_grid(Type~.)

你也可以把所有东西放在一个地块上(没有分面),但IMO却不太清楚。

ggplot(gg, aes(x=Butterfly, y=Freq, fill=Type))+
  geom_bar(stat="identity", position="dodge")

编辑(回复OP的评论)

现在我们有了数据,有几个选项 - 所有这些都是主题的变体。由于蝴蝶科的名称很长,我们可以旋转标签:

df <- structure(list(Butterfly_Family = structure(c(4L, 5L, 3L, 6L, 2L, 1L), .Label = c("Hesperiidae", "Lycaenidae", "Nymphalidae", "Papilionidae", "Pieridae", "Riodinidae"), class = "factor"), Family = c(13L, 15L, 55L, 1L, 55L, 33L), Genara = c(50L, 42L, 219L, 2L, 148L, 97L), Species = c(88L, 79L, 307L, 2L, 233L, 137L)), .Names = c("Butterfly_Family", "Family", "Genara", "Species"), class = "data.frame", row.names = c(NA, -6L))

gg <- melt(df,id="Butterfly_Family",value.name="Freq", variable.name="Type")
ggplot(gg, aes(x=Butterfly_Family, y=Freq, fill=Type))+
  geom_bar(stat="identity")+
  theme(axis.text.x=element_text(angle=-90, vjust=0.2))+
  facet_grid(Type~.)

或者,我们可以使用coord_flip()旋转整个图表。

ggplot(gg, aes(x=Butterfly_Family, y=Freq, fill=Type))+
  geom_bar(stat="identity")+
  coord_flip()+
  facet_grid(Type~.)

最后,我们可以旋转图形并将面从行方式更改为列方式。

ggplot(gg, aes(x=Butterfly_Family, y=Freq, fill=Type))+
  geom_bar(stat="identity")+
  coord_flip()+
  facet_grid(.~Type)