0
我按以下方式繪製由ID定義的多個圖形到不同文件中。R:統一基線R圖中的多個分段()和點()()
xy <- data.frame(NAME=c("NAME1","NAME1","NAME1","NAME2","NAME2","NAME2","NAME3","NAME3"),ID=c(87,87,87,199,199,199,233,233), X_START_YEAR=c(1950,1988,1994,1899,1909,1924,1945,1948),Y_START_VALUE=c(75,25,-90,-8,-55,-10,-9,12),X_END_YEAR=c(1985,1994,1999,1904,1924,1987,1946,1949), Y_END_VALUE=c(20,50,-15,-70,-80,-100,24,59))
NAME ID X_START_YEAR Y_START_VALUE X_END_YEAR Y_END_VALUE
1 NAME1 87 1950 75 1985 20
2 NAME1 87 1988 25 1994 50
3 NAME1 87 1994 -90 1999 -15
4 NAME2 199 1899 -8 1904 -70
5 NAME2 199 1909 -55 1924 -80
6 NAME2 199 1924 -10 1987 -100
7 NAME3 233 1945 -9 1946 24
8 NAME3 233 1948 12 1949 59
# Split glacier names by ID
ind <- split(x = xy,f = xy[,'ID'])
# Plot
for (i in ind){
xx = unlist(i[,grep('X_',colnames(i))])
yy = unlist(i[,grep('Y_',colnames(i))])
filename <- paste0(i[1, 'ID'], '.png')
png(filename, width=1679, height=1165, res=150)
if(any(xx < 1946)) {my_x_lim <- c(min(xx), 2014)} else {my_x_lim <- c(1946, 2014)}
par(mar=c(6,8,6,5))
plot(xx, yy)
i <- i[,-1]
segments(i[,2],i[,3],i[,4],i[,5],lwd=2)
points(xx, yy, pch=21,cex=1, bg='white')
dev.off()
}
我的問題:我所尋找的是一個基礎R解決方案,包括xy
整個數據到一個情節(而不是幾個情節像上面的代碼那樣),有多條線路並點(圖例中定義的組)。我想通過ggplot
完成這項工作非常簡單,但我很想知道如何在R基礎上做到這一點。任何想法?
這裏是ggplot
代碼,可能會給你什麼,我試圖做的一個想法:
library(ggplot2)
p = ggplot(xy)
p = p + geom_segment(aes(x = X_START_YEAR, xend = X_END_YEAR, y = Y_START_VALUE, yend = Y_END_VALUE,linetype=NAME))
print(p)
謝謝@CathG。我唯一仍在掙扎的地方在於它會自動從'xy'中取出每個'NAME'並且不僅粘貼它。有沒有一種方法不需要手動粘貼? – kurdtc 2014-10-20 13:57:28
你的意思是沒有「傳說」指令? – Cath 2014-10-20 14:02:16
例如,如果我的數據按不同的名稱分組,其標題爲示例1,然後是下一組測試,然後是示例3等等。這樣我就不必手動粘貼。 – kurdtc 2014-10-20 14:06:15