R-导入html/json映射文件以用于热图

R-导入html/json映射文件以用于热图,r,ggplot2,choropleth,R,Ggplot2,Choropleth,我正在尝试将美国DMA地图上传到R中,以创建Heatmaps。我发现ggplot和包在映射部分很有用,但不知道如何导入自己的映射以供使用。如果是我在网上找到的DMA地图,我将如何导入它 我还假设上传后,我需要创建自己的DMA_choropleth,以便根据人口对DMA区域进行着色,对吗?将tv.json从网站复制到磁盘,然后读取: df = data.frame(fromJSON("c:\\tv.json")) 您将得到一个1050行的数据帧。您找到的DMA映射(“nielsentopo.js

我正在尝试将美国DMA地图上传到R中,以创建Heatmaps。我发现ggplot和包在映射部分很有用,但不知道如何导入自己的映射以供使用。如果是我在网上找到的DMA地图,我将如何导入它


我还假设上传后,我需要创建自己的DMA_choropleth,以便根据人口对DMA区域进行着色,对吗?

将tv.json从网站复制到磁盘,然后读取:

df = data.frame(fromJSON("c:\\tv.json"))
您将得到一个1050行的数据帧。

您找到的DMA映射(“nielsentopo.json”)是topojson格式的。要将其作为可以映射的空间对象导入,需要安装geojsonio包。下面是用于安装包、读取json映射、将其转换为数据帧并打印的带注释的代码。为了给这张地图上的DMA区域上色-是的,您需要创建自己的choropleth类(有用:)

#包'geojsonio'安装说明:
#如果您是Mac用户,请首先使用自制软件安装软件包gdal(开放系统终端,键入“brew安装gdal”)
#然后安装您尚未安装的所有必需的R软件包:
#install.packages(“rgdal”,type=“source”,configure.args=“--with gdal config=/Library/Frameworks/gdal.framework/Versions/1.11/unix/bin/gdal-config--with proj include=/Library/Frameworks/proj.framework/unix/include--with proj lib=/Library/Frameworks/proj.framework/unix/lib”)
#安装程序包(“rgeos”,type=“source”)
#如果您是Linux用户,请首先安装所需的库(打开系统终端,键入“sudo apt get install libgdal1 dev libgdal dev libgeos-c1v5 libproj dev libv8 dev”)
#然后安装您尚未安装的所有必需的R软件包:
#install.packages(“rgdal”,type=“source”)
#安装程序包(“rgeos”,type=“source”)
#如果您是Windows用户,则无需执行任何初步步骤
#安装geojsonio包
install.packages(“geojsonio”)
#加载所需的包
图书馆(geojsonio)
图书馆(rgeos)
图书馆(rgdal)
图书馆(sp)
图书馆(ggmap)
图书馆(GG2)
图书馆(jsonlite)
#读取topjson文件
myMap您当然不需要安装
geojsonio
软件包。这是一个很棒的软件包,但是使用了
rgdal
来完成繁重的工作。这将获得地图和数据,而无需依赖特殊的choropleth pkg

library(sp)
library(rgdal)
library(maptools)
library(rgeos)
library(ggplot2)
library(ggalt)
library(ggthemes)
library(jsonlite)
library(purrr)
library(viridis)
library(scales)

neil <- readOGR("nielsentopo.json", "nielsen_dma", stringsAsFactors=FALSE, 
                verbose=FALSE)
# there are some techincal problems with the polygon that D3 glosses over
neil <- SpatialPolygonsDataFrame(gBuffer(neil, byid=TRUE, width=0),
                                  data=neil@data)
neil_map <- fortify(neil, region="id")

tv <- fromJSON("tv.json", flatten=TRUE)
tv_df <- map_df(tv, as.data.frame, stringsAsFactors=FALSE, .id="id")
colnames(tv_df) <- c("id", "rank", "dma", "tv_homes_count", "pct", "dma_code")
tv_df$pct <- as.numeric(tv_df$pct)/100

gg <- ggplot()
gg <- gg + geom_map(data=neil_map, map=neil_map,
                    aes(x=long, y=lat, map_id=id),
                    color="white", size=0.05, fill=NA)
gg <- gg + geom_map(data=tv_df, map=neil_map,
                    aes(fill=pct, map_id=id),
                    color="white", size=0.05)
gg <- gg + scale_fill_viridis(name="% US", labels=percent)
gg <- gg + coord_proj(paste0("+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96",
                             " +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"))
gg <- gg + theme_map()
gg <- gg + theme(legend.position="bottom")
gg <- gg + theme(legend.key.width=unit(2, "cm"))
gg
库(sp)
图书馆(rgdal)
图书馆(地图工具)
图书馆(rgeos)
图书馆(GG2)
图书馆(ggalt)
图书馆(主题)
图书馆(jsonlite)
图书馆(purrr)
图书馆(绿色)
图书馆(比例尺)

尼尔:不知什么原因,防御()不起作用。它不“喜欢”region='id'参数。你能帮忙吗?我得到了这个错误:几何组件中的点太少,在点-82.061259930000006 26.499350110000002点或附近,在点-89.1404651 29.1351506399999点或附近,在点-78.51876787000005 33.86766713000001SP处或附近,环形自相交是无效对象;考虑使用RGEOS::GunAuthOngIn(SPGOOM=SPP,ID=IDS):SuthOrthExeExpRe:无效:在-785187767.090005.5 33.867667130000001点或附近点-78518768900000 33.867667130000001的环自相交无效:
library(sp)
library(rgdal)
library(maptools)
library(rgeos)
library(ggplot2)
library(ggalt)
library(ggthemes)
library(jsonlite)
library(purrr)
library(viridis)
library(scales)

neil <- readOGR("nielsentopo.json", "nielsen_dma", stringsAsFactors=FALSE, 
                verbose=FALSE)
# there are some techincal problems with the polygon that D3 glosses over
neil <- SpatialPolygonsDataFrame(gBuffer(neil, byid=TRUE, width=0),
                                  data=neil@data)
neil_map <- fortify(neil, region="id")

tv <- fromJSON("tv.json", flatten=TRUE)
tv_df <- map_df(tv, as.data.frame, stringsAsFactors=FALSE, .id="id")
colnames(tv_df) <- c("id", "rank", "dma", "tv_homes_count", "pct", "dma_code")
tv_df$pct <- as.numeric(tv_df$pct)/100

gg <- ggplot()
gg <- gg + geom_map(data=neil_map, map=neil_map,
                    aes(x=long, y=lat, map_id=id),
                    color="white", size=0.05, fill=NA)
gg <- gg + geom_map(data=tv_df, map=neil_map,
                    aes(fill=pct, map_id=id),
                    color="white", size=0.05)
gg <- gg + scale_fill_viridis(name="% US", labels=percent)
gg <- gg + coord_proj(paste0("+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=37.5 +lon_0=-96",
                             " +x_0=0 +y_0=0 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"))
gg <- gg + theme_map()
gg <- gg + theme(legend.position="bottom")
gg <- gg + theme(legend.key.width=unit(2, "cm"))
gg