我有一个数据集,其中蝴蝶种类为行,并且它们以不同的列为食的植物科属种的数量。我试图在R中获得频率图,但在脚本中遇到了问题。然而,我可以用SPSS和excel绘制它。我想在这个特定的集合中使用R.非常感谢。
我的数据集具有以下形式。
Butterfly species #host families #host genera #host species
1 xxxxxxxxx xx xx xx
2 xxxxxxxxx xx xx xx
...
如果有人可以帮我解决这个问题,那将会非常有帮助。
答案 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)