从同一图中的因子绘制多个多边形

时间:2014-06-24 18:47:11

标签: r ggplot2

我有一个数据框,我想绘制像this picture

每个多边形由两条线之间的区域组成,其中oordinates(yVal)的行按数据框中的因子分组,type="A"|type="B"Fac1的每个值都有一个多边形。在ggplot中有一种简单的方法吗?我找到this example for plotting a single polygon,但我希望有一种方法可以通过一个因素来实现。

下面给出了一个可行的数据框:

Fac1 <- rep(c(50,95,99),times=6)
xVal <- c(rep(1,times=6),rep(2,times=6),rep(3,times=6))
yVal <- c(0,0,0,0,0,0,0,0,0.243,0,0,0.313,0.239,0.513,0.894,0.292,0.708,1.625)
type <- rep(c("A","A","A","B","B","B"),times=3)
df.plot <- as.data.frame(cbind(Fac1,xVal,yVal,type))

这给出了数据框:


   Fac1  xVal  yVal type
1    50     1     0    A
2    95     1     0    A
3    99     1     0    A
4    50     1     0    B
5    95     1     0    B
6    99     1     0    B
7    50     2     0    A
8    95     2     0    A
9    99     2 0.243    A
10   50     2     0    B
11   95     2     0    B
12   99     2 0.313    B
13   50     3 0.239    A
14   95     3 0.513    A
15   99     3 0.894    A
16   50     3 0.292    B
17   95     3 0.708    B
18   99     3 1.625    B

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不明白你的type变量对于情节的意义,但我认为这有效:

df.plot$Fac1 <- factor(df.plot$Fac1)

ggplot(df.plot, aes(x = xVal, y = yVal, group = Fac1, fill = Fac1)) +
    geom_polygon(alpha = 0.5)

如上所述,上面给出了“Fac1的每个值的一个多边形”。无论您指定为aes(group),都会识别出唯一的多边形。

也许Fac1type都可以识别多边形?如果是这样,试试这个:

df.plot$id <- interaction(df.plot$Fac1, df.plot$type)

ggplot(df.plot, aes(x = xVal, y = yVal, group = id, fill = Fac1, color = type)) +
    geom_polygon(alpha = 0.5, size = 1) +
    scale_color_manual(values = c("black", "firebrick2")) +
    scale_fill_brewer()

修改

啊,我应该注意到你对“两行之间的区域”的描述。为此,您希望geom_ribbon不是geom_polygon,我们会进行一些数据转换(如果您在我的第二次猜测中添加了id列,请在运行之前删除它dcast 1}}):

library(reshape2)
wide.df <- dcast(df.plot, Fac1 + xVal ~ type, value.var = "yVal")
ggplot(wide.df, aes(x = xVal, ymin = A, ymax = B, group = Fac1, fill = Fac1)) +
    geom_ribbon(alpha = 0.5)