在ggplot2 geom_tile图中,是否有可能躲避瓷砖的位置?

时间:2013-07-04 13:19:14

标签: r position ggplot2

我正在尝试制作一个条形图,其中条形图根据第三个变量垂直淡入,我正在使用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的两个图形在彼此之间绘制:

enter image description here

我希望那些x为'a'的两个小节被绘制成单独的小节。

这是我希望结果看起来像的模型。 a列中的任何一列的数据都不正确,但它显示了x轴上的分组:

enter image description here

1 个答案:

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

你应该得到:

enter image description here


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

enter image description here


<强> ORIGINAL

您可以使用geom_bar()来使用stat="identity"

ggplot(a, aes(x = x, y = y, fill=x, alpha=z)) + 
  geom_bar(stat="identity", position="dodge")

enter image description here