使用ggplot在一个轴上的多个多边形

时间:2016-02-06 08:43:58

标签: r loops for-loop ggplot2

我是R编程的新手,我想在一个图表中绘制多个三角形。 当我将ggplot命令放在for循环中时,它只会重置图表查看器。但我想同时看到一个图中的所有图。 这是我一直在做的代码。

data<-read.csv("test.csv",sep=",",header=TRUE)
library("ggplot2")
for(i in 1:5){      
D=data.frame(x=c(data$x1[i],data$x2[i],data$x3[i]),
y=c(data$y1[i],data$y2[i],data$y3[i]))
print(ggplot()+
(geom_polygon(data=D, mapping=aes(x=x,y=y),col="blue")))
}

我希望你能帮助我。非常感谢

2 个答案:

答案 0 :(得分:5)

我们可以使用 data.table 包来保持我们的重塑为一步,因为它允许我们指定度量列的模式。

首先,我们为每个观察创建一个ID:

dat$ID <- 1:nrow(dat)

然后我们以长格式创建数据。这是ggplot的最佳格式:每个观察点(或点)都有自己的行。

library(data.table)
dat_m <- melt(setDT(dat),measure=patterns(c("^x","^y")),value.name=c("x","y"))

绘图很简单:

p <- ggplot(dat_m, aes(x=x,y=y,group=ID)) +
  geom_polygon()
p

enter image description here

使用的数据:

dat <- structure(list(x1 = c(1, 3, 5), x2 = c(2, 4, 6), x3 = c(1, 3, 
5), y1 = c(1, 1, 1), y2 = c(1, 1, 1), y3 = c(2, 2, 2)), .Names = c("x1", 
"x2", "x3", "y1", "y2", "y3"), row.names = c(NA, -3L), class = "data.frame")

答案 1 :(得分:1)

您的代码正在为每个循环创建一个新的ggplot()。你想要的是将plot命令分成多个步骤。首先在for循环外设置p = ggplot(),然后在for循环内添加多边形:p = p + geom_polygon(...)。在for循环结束后,调用print(p)以查看结果。