Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 进行分组条形图的最简单方法_R_Bar Chart - Fatal编程技术网

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。