R 进行分组条形图的最简单方法
我有以下数据帧:R 进行分组条形图的最简单方法,r,bar-chart,R,Bar Chart,我有以下数据帧: Catergory Reason Species 1 Decline Genuine 24 2 Improved Genuine 16 3 Improved Misclassified 85 4 Decline Misclassified 41 5 Decline Taxonomic 2 6 Improved Taxonomic 7 7
Catergory Reason Species
1 Decline Genuine 24
2 Improved Genuine 16
3 Improved Misclassified 85
4 Decline Misclassified 41
5 Decline Taxonomic 2
6 Improved Taxonomic 7
7 Decline Unclear 41
8 Improved Unclear 117
我试着做一个分组条形图,物种作为高度,然后两种颜色作为分类
这是我的密码:
Reasonstats<-read.csv("bothstats.csv")
Reasonstats2<-as.matrix(Reasonstats[,3])
barplot((Reasonstats2),beside=T,col=c("darkblue","red"),ylab="number of
species",names.arg=Reasonstats$Reason, cex.names=0.8,las=2,space=c(0,100)
,ylim=c(0,120))
box(bty="l")
Reasonstats不是barplot
解决方案,而是使用lattice
和barchart
:
library(lattice)
barchart(Species~Reason,data=Reasonstats,groups=Catergory,
scales=list(x=list(rot=90,cex=0.8)))
我为barplot()
编写了一个名为bar()
的函数包装器,以完成您在这里尝试执行的操作,因为我需要经常执行类似的操作。指向该函数的Github链接为。复制并粘贴到R中后,您可以
bar(dv = Species,
factors = c(Category, Reason),
dataframe = Reasonstats,
errbar = FALSE,
ylim=c(0, 140)) #I increased the upper y-limit to accommodate the legend.
一个方便之处是,它将使用分类变量中的级别名称(例如,“拒绝”和“改进”)在绘图上添加图例。如果每个标高都有多个观测值,它还可以绘制错误条(此处不适用,因此errbar=FALSE
在R中绘制图形有几种方法;lattice
是其中之一,并且始终是一种合理的解决方案,+1到@agstudy。如果您想在基本图形中这样做,可以尝试以下方法:
Reasonstats <- read.table(text="Category Reason Species
Decline Genuine 24
Improved Genuine 16
Improved Misclassified 85
Decline Misclassified 41
Decline Taxonomic 2
Improved Taxonomic 7
Decline Unclear 41
Improved Unclear 117", header=T)
ReasonstatsDec <- Reasonstats[which(Reasonstats$Category=="Decline"),]
ReasonstatsImp <- Reasonstats[which(Reasonstats$Category=="Improved"),]
Reasonstats3 <- cbind(ReasonstatsImp[,3], ReasonstatsDec[,3])
colnames(Reasonstats3) <- c("Improved", "Decline")
rownames(Reasonstats3) <- ReasonstatsImp$Reason
windows()
barplot(t(Reasonstats3), beside=TRUE, ylab="number of species",
cex.names=0.8, las=2, ylim=c(0,120), col=c("darkblue","red"))
box(bty="l")
Reasonstats与ggplot2:
library(ggplot2)
Animals <- read.table(
header=TRUE, text='Category Reason Species
1 Decline Genuine 24
2 Improved Genuine 16
3 Improved Misclassified 85
4 Decline Misclassified 41
5 Decline Taxonomic 2
6 Improved Taxonomic 7
7 Decline Unclear 41
8 Improved Unclear 117')
ggplot(Animals, aes(factor(Reason), Species, fill = Category)) +
geom_bar(stat="identity", position = "dodge") +
scale_fill_brewer(palette = "Set1")
库(ggplot2)
动物非常有用,谢谢!@Jack Ryan应该是ggplot(动物,aes(因子(原因),物种)还是ggplot(动物,aes(因子(原因),as.factor(物种)
?因为在我的例子中,我将数据隐藏为相同的格式,但它制作了一个堆栈条而不是一个组条。正如RKR所指出的,ggplot在绘制分组条形图时需要因子。我也有类似的数据,但由于其他要求,我没有将列作为因子读取,并且在我确定这一点之前,我无法绘制分组条quirement.这里的颜色图例如何?@maciek您可以使用auto.key=T
中的barchart
函数来创建图例。谢谢。使用基本图形的一个优点是,您可以使用par()或layout()组合多个基本图形.使用包装器时,我在哪里定义用于errorbars的列?谢谢,我想知道,有没有方法堆叠此直方图?我想创建一个三面板图,前两个带有此函数允许的规则分组条形图,然后第三个带有将每个条形图分为两部分的条形图。1/22/2--如果我有条形图的话(dv=numoutspc1,factors=c(性别,人口),dataframe=WALL,errbar=FALSE,col=c(“红色”,“紫色”,“蓝色”),ylab=c(“与每个PCaxis相关的异常值的数量”),ylim=c(0240))35;######但我希望每个条中也有numoutsPC2。