我正在尝试制作一个条形图,其中条形图根据第三个变量垂直淡入,我正在使用geom_tile来启用它。但是,我在x轴上有一个给定类别的多个条形图,我想躲避它们的位置,将不同的x值放在一组不重叠的条形图中。
是否可以使用position='dodge'
或类似geom_tile
,如果是,我的语法有什么问题?
a <- data.frame(x = factor(c(rep('a',5), rep('a',5), rep('b',5), rep('c',5))),
y = c(1:5, 1:5, 1:5, 1:5),
z = c(5:1, c(5,4,4,4,1), 5:1, 5:1)
)
ggplot(a, aes(x = x, y = y, group = x)) +
geom_tile(aes(alpha = z, fill = x, width = 1),
position = 'dodge')
示例数据框a
如下所示:
x y z
1 a 1 5
2 a 2 4
3 a 3 3
4 a 4 2
5 a 5 1
6 a 1 5
7 a 2 4
8 a 3 4
9 a 4 4
10 a 5 1
11 b 1 5
12 b 2 4
13 b 3 3
14 b 4 2
15 b 5 1
16 c 1 5
17 c 2 4
18 c 3 3
19 c 4 2
20 c 5 1
...并且当前代码生成的图形在x值之间没有间隙,而x是a的两个图形在彼此之间绘制:
我希望那些x为'a'的两个小节被绘制成单独的小节。
这是我希望结果看起来像的模型。 a列中的任何一列的数据都不正确,但它显示了x轴上的分组:
答案 0 :(得分:1)
编辑2
要获得所需效果,请使用geom_bar()
但请务必更改y
数据以指示条形高度,在这种情况下为1.原因是条形图堆叠,因此存在无需指定y轴位置,而是指定高度。
试试这个:
library(ggplot2)
a <- data.frame(x = factor(c(rep('a',5), rep('a',5), rep('b',5), rep('c',5))),
y = 1,
z = c(5:1, c(5,4,4,4,1), 5:1, 5:1)
)
a$bar <- rep(1:4, each=5)
ggplot(a, aes(x = factor(bar), y=y, fill=x, alpha=z)) +
geom_bar(stat="identity") +
facet_grid(~x, space="free", scale="free")
你应该得到:
编辑1
你可以接近你描述的内容:
例如:
a$bar <- rep(1:4, each=5)
ggplot(a, aes(x = factor(bar), y = y, fill=x, alpha=z)) +
geom_bar(stat="identity", position="dodge") +
facet_grid(~x, space="free", scale="free")
<强> ORIGINAL 强>
您可以使用geom_bar()
来使用stat="identity"
:
ggplot(a, aes(x = x, y = y, fill=x, alpha=z)) +
geom_bar(stat="identity", position="dodge")