2016-02-06 43 views
0

在R編程中,我想要在一個圖表中繪製多個三角形。 當我將ggplot命令放入for循環中時,它只會重置圖表查看器。但我想同時在一個圖中看到所有圖。 這是我一直在努力的代碼。使用ggplot在一個軸上的多個多邊形

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"))) 
} 

我希望你能幫助me.Many感謝

+1

嗨,歡迎SO。請考慮閱讀[問]和如何產生[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。它使其他人更容易幫助你。 – Heroka

回答

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

您的代碼創建一個新的ggplot()每個迴路。你想要的是將繪圖命令分成多個步驟。首先在for循環之外設置p = ggplot(),然後在for循環中添加您的多邊形:p = p + geom_polygon(...)。在for循環結束後,請致電print(p)查看結果。

+0

在ggplot中,當你多次做同樣的事情時,通常不是要走的路。通過對數據和分組命令進行一些改造可能會更容易解決問題。 – Heroka

+0

@Heroka正確 - 根本不使用任何for循環會更漂亮。 y1,y2和y3列可以是一列,並有一列用於顯示它們屬於哪個三角形。我的回答只是最小化了使其運行所需的代碼編輯量。 – CPhil