0

我正在尝试对两个条形图进行分组,但到目前为止我还没有成功......我遵循了这个示例,但输出不符合预期。这些酒吧是一个在另一个之后,而不是彼此相邻。

未分组的条形图

这是我使用的代码行:

  barplot(as.matrix(counts),xaxt='n', col=c("white","blue"), ylim=c(0.1,1300), axes=FALSE,  beside=T, space = 1.4, mar=c(5,5,5,5))

当我尝试这个...

> barplot(as.matrix(counts), beside = TRUE)
> barplot(as.matrix(counts), beside = TRUE, space = c(0, 1.4))

...我得到这个情节:

在此处输入图像描述

这是我的数据框,以防导致问题:

> counts
     V1  V2
1    26  50
2    50  86
3    86  50
4    50  50
5    50  50
6    50 100
7   100 150
8   150 350
9   350  50
10   50  28
11   28 300
12  300 250
13  250 300
14  300 250
15  250 300
16  300 500
17  500 400
18  400   0
19  600   0
20  500   0
21 1250   0

> dput(counts)
structure(list(V1 = c(26, 50, 86, 50, 50, 50, 100, 150, 350, 
50, 28, 300, 250, 300, 250, 300, 500, 400, 600, 500, 1250), V2 = c(50, 
86, 50, 50, 50, 100, 150, 350, 50, 28, 300, 250, 300, 250, 300, 
500, 400, 0, 0, 0, 0)), .Names = c("V1", "V2"), row.names = c(NA, 
-21L), class = "data.frame")

有任何想法吗?

4

1 回答 1

0

我认为问题在于您只提供一个space值。From ?barplot: " 如果 height 是一个矩阵并且 beside 是 TRUE,空间可以由两个数字指定,其中第一个是同一组中的条之间的空间,第二个是组之间的空间。如果没有明确给出,它默认到 c(0,1) 如果高度是一个矩阵并且旁边是 TRUE"。

尝试这个:

barplot(as.matrix(counts), beside = TRUE)
barplot(as.matrix(counts), beside = TRUE, space = c(0, 1.4))

更新以下评论
鉴于您似乎希望按行而不是按列(指原始数据)分组条形,您需要将矩阵转置为“宽”格式。barplot输入矩阵的每一对应一组柱状图,每一行对应组内的不同柱状图。当您的原始数据被组织时,两列 V1 和 V2 代表组。因此,我上面的脚本产生的图有两组,每组有 21 个条形图。转置后,您将得到一个包含 21 个组的图,每个组有两个条形图。

barplot(t(as.matrix(counts)), beside = TRUE)

在此处输入图像描述

我添加一个ggplot示例进行比较。在ggplot数据中应该是一个长格式的数据框。因此,首先我们需要“融化”数据。这里我使用meltpackage 中的函数reshape2你可以在这里找到几个很好的ggplot例子。

library(reshape2)
library(ggplot2)

df <- melt(counts)
ggplot(data = df, aes(x = as.factor(Var1), y = value, fill = Var2)) +
  geom_bar(stat = "identity", position = "dodge")

在此处输入图像描述

于 2013-10-09T14:09:47.267 回答