我正在尝试将两个条形图分组,但到目前为止我还没有成功... 我遵循了这个example,但输出并不理想。这些酒吧是一个接一个而不是彼此相邻。
以下是我使用的代码行:
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")
有什么想法吗?
答案 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)
我添加了一个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")