我有一个由20个数据框(下面的名称)组成的班级列表(L),看起来像这样(我不能制作一个相当清晰的表格或嵌入图像,所以这里是一个链接到图像):
[
数据框具有以下名称:
"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")
答案 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网格以显示实际比例,大量过度绘图...
如果仅在数据中绘制带有“1”的点:
p2 <- ggplot(dat_long[dat_long$value==1,], aes(x=Longitude, y=Latitude, alpha=suffix, color=prefix)) +
geom_point(size=3)