分组条形图

时间:2013-10-09 13:43:29

标签: r plot bar-chart

我正在尝试将两个条形图分组,但到目前为止我还没有成功... 我遵循了这个example,但输出并不理想。这些酒吧是一个接一个而不是彼此相邻。

barchars ungrouped

以下是我使用的代码行:

  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))

......我得到这个情节:

enter image description here

这是我的数据框,如果导致问题:

> 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")

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为问题在于您只提供一个space值。从?barplot:“如果height是一个矩阵而旁边是TRUE,则空格可以由两个数字指定,其中第一个是同一组中条形之间的空间,第二个是组之间的空格。如果不是明确给出,如果height是矩阵,则默认为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)

enter image description here

我添加了一个ggplot示例进行比较。在ggplot中,数据应该是长格式的数据帧。因此,首先我们需要“融化”数据。在这里,我使用包melt中的reshape2函数。您可以找到几个不错的ggplot示例here

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")

enter image description here