2

我正在做一个项目,我需要在球体上绘制一些点。我所拥有的是每个点的经度和纬度,以及每个点的值。例如,

longitude latitude value
123       23       1.3
75        -34      2.8
190       48       2.1
...      

我想要一个像下面这样的情节。我还希望点的大小与数据集中的值成比例。所以 2.8 会有一个更大的点,1.3 会有一个更小的点,等等。世界地图是可选的。

我想知道 R 中是否有任何包可以完成这项工作?非常感谢任何建议或代码!

在此处输入图像描述

4

3 回答 3

7

一个使用baseplot 和 packages的简单示例sprgdal并且maptools

library(sp)
library(maptools)
library(rgdal)
xy <- data.frame(lon=c(-130,110,3,45),lat=c(60,-10,50,30)) #Some coordinates
value <- data.frame(value=c(1.5,0.8,2.3,2)) #Some values for the point size
df <- SpatialPointsDataFrame(xy,value,proj4string=CRS("+proj=lonlat"))
dfMoll <- spTransform(df, CRS("+proj=moll")) #Mollweide projection of the data
data(wrld_simpl) # A base world map
wrld_moll <- spTransform(wrld_simpl, CRS("+proj=moll")) # ... that we projects as well
plot(wrld_moll) #... and plot
points(dfMoll, cex=dfMoll$value, pch=20, col="red") #...with our data points

在此处输入图像描述

于 2013-03-14T16:08:27.473 回答
6

也许一种方法可以做到这一点ggplot2

ggplot() +
  geom_polygon(data=world,aes(x=long, y=lat, group=group), fill=NA,colour="black") +
  geom_point(data=d, aes(x=longitude, y=latitude, size=value), color="red") +
  coord_map("mollweide")

这给出了以下地图,不幸的是有一些小故障:

在此处输入图像描述

顺便说一句,您可以coord_map在不绘制地图的情况下使用:

ggplot() +
  geom_point(data=d, aes(x=longitude, y=latitude, size=value), color="red") +
  coord_map("mollweide")

在此处输入图像描述

于 2013-03-14T15:59:27.793 回答
2

查看 mapproj 包。它会为你做各种地图投影。它不进行绘图,而是为您投影点,然后将其传递给您选择的功能。

于 2013-03-14T16:16:46.640 回答