【问题标题】:Plot multiple polygons from factor in same plot从同一图中的因子绘制多个多边形
【发布时间】:2014-06-24 18:47:10
【问题描述】:

我有一个像this picture 这样的数据框。

每个多边形由两条线之间的区域组成,其中线的坐标 (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

任何帮助将不胜感激。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我不明白您的 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 之前将其删除):

    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)
    

    【讨论】:

    • 谢谢,差不多就行了。 yVal 变量是同一 xVal 在不同级别的两个配对测量之一。 type 变量是一个替身,显示它属于哪个配对测量,因此Fac1 有两行。这似乎大部分时间都有效,但正如您在this plot 中看到的那样,蓝色多边形应该填充到我添加的黑线。
    • 完美!如此简单,你为我节省了大量时间。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    相关资源
    最近更新 更多