我有一个数据框,我想绘制像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
任何帮助都将不胜感激。
答案 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)
,都会识别出唯一的多边形。
也许Fac1
和type
都可以识别多边形?如果是这样,试试这个:
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)