在 R 中使用 plotKML 时如何调整点的大小
How to adjust the size of the points when using plotKML in R
我想使用 plotKML
包在 GoogleEarth 中显示 SpatialPointsDataFrame 对象。当我刚刚传递我想要绘制的 sp
对象时,它工作正常,但试图猜测我想要的图标颜色和大小。当我查看 plotKML
的文档时,它指定如果 S4 签名是 SpatialPointsDataFrame,那么我可以传递颜色和大小的值。但是每次我尝试这个我都会收到以下错误:
Error in `[.data.frame`(obj@data, , deparse(size)) :
undefined columns selected
以下是将重现此错误的示例代码块。
library(sp)
library(plotKML)
data(bigfoot)
bigfoot = head(bigfoot)
coordinates(bigfoot) <- c('Lon','Lat')
proj4string(bigfoot) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
plotKML(bigfoot, size = 1)
顺便说一句,我看了一下源代码,认为这可能有所帮助。源码(plotKML.sp.R)中的相关代码块如下:
# Guess aesthetics if missing:
if(missing(size)){
obj@data[,"size"] <- obj@data[,1]
} else {
if(is.name(size)|is.call(size)){
obj@data[,"size"] <- eval(size, obj@data)
} else {
obj@data[,"size"] <- obj@data[,deparse(size)]
}
}
if(missing(colour)){
obj@data[,"colour"] <- obj@data[,1]
message("Plotting the first variable on the list")
} else {
if(is.name(colour)|is.call(colour)){
obj@data[,"colour"] <- eval(colour, obj@data)
} else {
obj@data[,"colour"] <- obj@data[,as.character(colour)]
}
}
请帮忙,我这辈子都弄不明白。
您发布的源代码提出了一个解决方案。首先将一个新的数值变量附加到空间点数据框。然后将其用作您的尺寸参数,但首先应用 'as.name':
n <- nrow(bigfoot@data)
bigfoot$newsize <- rep(1, n)
head(bigfoot)
plotKML(bigfoot, file.name='big.kml', size=as.name('newsize'))
目前可以使用kml function修改美学参数例如:
data(eberg)
eberg <- eberg[runif(nrow(eberg))<.1,]
library(sp)
library(rgdal)
coordinates(eberg) <- ~X+Y
proj4string(eberg) <- CRS("+init=epsg:31467")
## Not run: # Simple plot
kml(eberg, file = "eberg-0.kml")
# Plot using aesthetics
kml(eberg, colour = SNDMHT_A, size = CLYMHT_A, alpha = 0.75, file = "eberg-1.kml")
我需要看看为什么 'plotKML' 方法没有进一步传递 'size' 参数。我不使用 plotKML,而是经常建议包用户开始构建自己的可视化 templates/functions 例如:
kml_points <- function(obj, file, z.lim, points_names="", ...){
kml_open(file)
kml_layer(obj, colour=obj at data[,1], shape="http://maps.google.com/mapfiles/kml/pal2/icon18.png",
colour_scale=SAGA_pal[[1]], points_names="", ...)
kml_legend.bar(x=obj at data[,1], legend.file=gsub(".kml", ".png",
file), legend.pal=SAGA_pal[[1]], z.lim=z.lim)
kml_screen(image.file=gsub(".kml", ".png", file))
kml_close(file)
kml_View(file)
}
PS:如果你打算写大堆点,请考虑同时使用klm.tiles功能。
我想使用 plotKML
包在 GoogleEarth 中显示 SpatialPointsDataFrame 对象。当我刚刚传递我想要绘制的 sp
对象时,它工作正常,但试图猜测我想要的图标颜色和大小。当我查看 plotKML
的文档时,它指定如果 S4 签名是 SpatialPointsDataFrame,那么我可以传递颜色和大小的值。但是每次我尝试这个我都会收到以下错误:
Error in `[.data.frame`(obj@data, , deparse(size)) :
undefined columns selected
以下是将重现此错误的示例代码块。
library(sp)
library(plotKML)
data(bigfoot)
bigfoot = head(bigfoot)
coordinates(bigfoot) <- c('Lon','Lat')
proj4string(bigfoot) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
plotKML(bigfoot, size = 1)
顺便说一句,我看了一下源代码,认为这可能有所帮助。源码(plotKML.sp.R)中的相关代码块如下:
# Guess aesthetics if missing:
if(missing(size)){
obj@data[,"size"] <- obj@data[,1]
} else {
if(is.name(size)|is.call(size)){
obj@data[,"size"] <- eval(size, obj@data)
} else {
obj@data[,"size"] <- obj@data[,deparse(size)]
}
}
if(missing(colour)){
obj@data[,"colour"] <- obj@data[,1]
message("Plotting the first variable on the list")
} else {
if(is.name(colour)|is.call(colour)){
obj@data[,"colour"] <- eval(colour, obj@data)
} else {
obj@data[,"colour"] <- obj@data[,as.character(colour)]
}
}
请帮忙,我这辈子都弄不明白。
您发布的源代码提出了一个解决方案。首先将一个新的数值变量附加到空间点数据框。然后将其用作您的尺寸参数,但首先应用 'as.name':
n <- nrow(bigfoot@data)
bigfoot$newsize <- rep(1, n)
head(bigfoot)
plotKML(bigfoot, file.name='big.kml', size=as.name('newsize'))
目前可以使用kml function修改美学参数例如:
data(eberg)
eberg <- eberg[runif(nrow(eberg))<.1,]
library(sp)
library(rgdal)
coordinates(eberg) <- ~X+Y
proj4string(eberg) <- CRS("+init=epsg:31467")
## Not run: # Simple plot
kml(eberg, file = "eberg-0.kml")
# Plot using aesthetics
kml(eberg, colour = SNDMHT_A, size = CLYMHT_A, alpha = 0.75, file = "eberg-1.kml")
我需要看看为什么 'plotKML' 方法没有进一步传递 'size' 参数。我不使用 plotKML,而是经常建议包用户开始构建自己的可视化 templates/functions 例如:
kml_points <- function(obj, file, z.lim, points_names="", ...){
kml_open(file)
kml_layer(obj, colour=obj at data[,1], shape="http://maps.google.com/mapfiles/kml/pal2/icon18.png",
colour_scale=SAGA_pal[[1]], points_names="", ...)
kml_legend.bar(x=obj at data[,1], legend.file=gsub(".kml", ".png",
file), legend.pal=SAGA_pal[[1]], z.lim=z.lim)
kml_screen(image.file=gsub(".kml", ".png", file))
kml_close(file)
kml_View(file)
}
PS:如果你打算写大堆点,请考虑同时使用klm.tiles功能。