从类列表创建geom_points集

时间:2015-11-24 11:47:30

标签: r ggplot2

我有一个由20个数据框(下面的名称)组成的班级列表(L),看起来像这样(我不能制作一个相当清晰的表格或嵌入图像,所以这里是一个链接到图像):

[data frame

数据框具有以下名称:

"FGN" "FGS" "FGM" "FGT" "FGL" "CN"  "CS"  "CM"  "CT"  "CL"  "SN"  "SS"  "SM"  "ST"  "SL"  "ON"  "OS"  "OM" "OT"  "OL"

它对应于数据框中的标题(所有数据框都来自一个较大的表,该表被细分为每列中包含所有1的帧)。

基本上我想将每个数据帧的所有坐标绘制到地图上,每个前缀(FGx,Cx,Sx,Ox)使用不同的颜色,每个后缀使用不同的alphas(xN,xS,xM, xT,xL)。

对于我做过的颜色:

col <- floor(seq(by=0.2, length.out=length(n)))
col <- data.frame(col)
rownames(col) <- n

n是上面的名字。

我为alpha值设想了类似的东西,但我不确定如何实现它。只需创建一个类似上面的序列,然后从中删除所有单位值。可能有更好的方法。

然后,我想用ggplot创建geom_points。

因此对于类列表中的每个data.frame都是这样的(尽管由于某些原因这不起作用):

FGNGeo <- geom_point(data=L$FGN,aes(x=Longitude, y=Latitude, col=col["FGN","col"],alpha=alpha["FGN","alpha"]))

但这适用于所有名称,无需全部输入。

我不知道如何做最后一部分,我真的很感激它的一些帮助。我经常浏览教程,但这些东西很复杂(!)所以对我来说太难了。 \

编辑:

dput(head(activities,15))

structure(list(Latitude = c(51.481435, 51.478936, 51.481655, 
51.456898, 51.476709, 51.48305, 51.487558, 51.485591, 51.485591, 
51.483357, 51.488441, 51.488441, 51.473205, 51.480465, 51.484981
), Longitude = c(-0.31310288, -0.32133158, -0.31403087, -0.36147879, 
-0.34428084, -0.31033569, -0.30246309, -0.30884466, -0.30884466, 
-0.30356965, -0.3013212, -0.3013212, -0.33304685, -0.30318732, 
-0.31268398), FGN = c(0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 1L, 0L, 0L), FGS = c(0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 0L), FGM = c(0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), FGT = c(1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L), FGL = c(0L, 0L, 
1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L), CN = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L), CS = c(1L, 
1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), CM = c(0L, 
0L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L), CT = c(1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), CL = c(0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L), SN = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), SS = c(0L, 
1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L), SM = c(0L, 
0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L), ST = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), SL = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L), ON = c(0L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L), OS = c(0L, 
0L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L), OM = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), OT = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), OL = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L)), .Names = c("Latitude", 
"Longitude", "FGN", "FGS", "FGM", "FGT", "FGL", "CN", "CS", "CM", 
"CT", "CL", "SN", "SS", "SM", "ST", "SL", "ON", "OS", "OM", "OT", 
"OL"), row.names = c(13L, 17L, 18L, 19L, 20L, 21L, 23L, 25L, 
26L, 28L, 33L, 34L, 36L, 45L, 50L), class = "data.frame")

1 个答案:

答案 0 :(得分:0)

这是一个开始。通常在ggplot中,您需要为要在数据中的一行上绘制的每个点获取所有数据。换句话说,您的数据需要采用“长”格式,包含前缀和后缀列。然后ggplot2的强大功能使得创建alpha和颜色标度变得非常容易。

library(reshape2)
library(ggplot2)

#turn to long
dat_long <- melt(activities,id.var=c("Longitude","Latitude"))

#identify pre- and suffixes. Can probably cleaner, but you get the idea
#prefix: remove last character
dat_long$prefix <- sub("[A-Z]$","",dat_long$variable)
#suffix: get last character
dat_long$suffix <- substring(dat_long$variable, nchar(as.character(dat_long$variable)))

p1 <- ggplot(dat_long, aes(x=Longitude, y=Latitude, alpha=suffix, color=prefix)) +   
geom_point(size=3)

添加了facet网格以显示实际比例,大量过度绘图...

enter image description here

如果仅在数据中绘制带有“1”的点:

p2 <- ggplot(dat_long[dat_long$value==1,], aes(x=Longitude, y=Latitude, alpha=suffix, color=prefix)) + 
  geom_point(size=3)

enter image description here