数据可视化之——REmap

REmap是ECharts中交互地图可视化功能的R接口,通过它可以直接使用R代码(而不必写JS代码)来实现交互地图可视化。本文将介绍如何使用REmap包实现全国主要城市天气可视化。

1 准备工作

1.1 安装R和RStudio

见R基础部分

1.2 安装REmap

library(devtools)
install_github(‘lchiffon/REmap‘)

请注意,以上命令默认你已经安装了devtools,如果你没有安装devtools,那么请先安装之。 ### 1.3 准备三张天气图片 图片可以自行百度或者设计,或者直接引用我github上的图片。

图片链接地址https://github.com/wcc3358/ChinaWeatherVisualization

图片形式大致如下:

将天气数据做简化,简化后只有晴天、多云以及阴天三种。

2 载入REmap包

library(rvest) #用来爬取数据
library(REmap) #实现地图可视化
options(remap.js.web=T)

设置options(remap.js.web=T)后,生成html将保存在当前工作目录,否则它会保存在默认的临时文件夹中。

3 爬取天气数据

选择中央气象台的天气数据,采用rvest包爬取天气数据:

## 爬取天气数据
website <- "http://www.nmc.cn/publish/forecast/china.html"
web <- read_html(website,encoding = "UTF-8")
weather.data <- web %>% html_nodes("div.area ul li") %>% html_text()
fun <- function(x){
  temp  <- strsplit(x,split = "[\n]+")[[1]]
  item <- gsub(pattern = "\\s+",replacement = "",x = temp)
  res <- item[item!=""]
  res
}
weather.data <- sapply(weather.data,fun)
# 转置
weather.data <- t(weather.data)
# 重命名行和列
weather.data <- as.data.frame(weather.data,row.names=1:nrow(weather.data),stringsAsFactors=FALSE)
colnames(weather.data) <- c("area","weather","temperature")

4 数据整理

继续整理数据,生成衍生变量:weatherc

# 数据整理
# 获取末尾的40个城市的记录
weather.data <- tail(weather.data,40)
# 提取天气中的前3个字儿
weather <- substr(weather.data$weather,1,3)
weather
#  [1] "多云"   "多云转" "多云"   "阵雨转" "阴转小" "晴转多"
#  [7] "晴"     "晴"     "晴"     "晴"     "晴转多" "多云"
# [13] "晴转小" "阵雨转" "大雨"   "大雨转" "大雨转" "大雨"
# [19] "大到暴" "小雨转" "晴"     "多云"   "阵雨"   "阴"
# [25] "晴"     "多云"   "晴"     "多云"   "多云"   "小雨转"
# [31] "多云"   "阴转多" "中雨"   "小雨转" "阵雨转" "晴"
# [37] "多云转" "晴转多" "晴"     "阴转小"

# 查出匹配字段的索引
ind1 <- grep("晴",weather)
ind20 <- grep("云",weather)
ind21 <- grep("阴",weather)
ind2 <- c(ind20,ind21)
ind3 <- grep("雨",weather)
# 将各匹配字段赋对应的英文天气
weather.data$weatherc <- NA
weather.data$weatherc[ind1] <- "sunny"
weather.data$weatherc[ind2] <- "cloudy"
weather.data$weatherc[ind3] <- "rainy"
# 去掉了未能成功赋值的行
weather.data <- weather.data[-19,]

整理后的数据如上,最后一列weatherc表示简化后的天气类型,即是sunny、cloudy还是rainy,其中小雨转多云、多云转晴这些天气状况直接就简化为rainy以及cloudy,简化后方便与准备工作3中所表示的三种天气图片相对应。

具体的代码不做详细分析,中间涉及到正则匹配和替换,如果你不了解正则,去百度搜搜三十分钟学会正则表达式,你就能大致明白。

我想特别说明的是,作者的这个包里提取经纬度的函数get_city_coord在提取三个字的城市时存在BUG,所以上述代码在最后使用代码dat0[-c(1,6),]时暂时去掉了三个字的城市数据。该部分BUG已经提交给作者,相信很快就会修复。

5 可视化展示

可视化展示的三个步骤:

a. 采用get_city_coord获取城市的经纬度数据

b. 封装城市的图片以及标签信息

c. 采用remapB获做城市天气可视化展示

remapB(center = c(104.114129,37.550339),
       zoom = 5,
       color = "Bright",
       title = "",
       subtitle = "",
       markLineData = NA,
       markPointData = NA,
       markLineTheme = markLineControl(),
       markPointTheme = markPointControl(),
       geoData = NA)

remapB函数相关参数说明:

  • makePointData:城市相关信息,包括需要展示的天气状况图片以及文字信息
  • geoData:城市对应的经纬度
  • color:地图的主题颜色,有“Bright”, “Blue”, “light”, “dark”, “redalert”, “googlelite”, “grassgreen”, “midnight”, “pink”, “darkgreen”, “bluish”, “grayscale”, “hardedge”可选,示例见下文 - subtitle:副标题
  • makePointTheme:控制显示的图片的大小,显示效果等等
  • markLineData:标记线的数据
  • markLineTheme:标记线的主题
  • zoom: Bmap的大小缩放zoom:5国家数据 zoom:15 城市的数据

# 天气可视化展示
# remap.init()
geoData <- sapply(weather.data$area, get_city_coord)
geoData
# 香港      澳门      台北      北京      西青
# [1,] 114.17199 113.54940 121.52487 116.41355 117.01380
# [2,]  22.28109  22.19296  25.04218  39.91101  39.14744
# 天津      太原      沈阳      长春      上海
# [1,] 117.20591 112.55706 123.43897 125.33017 121.48024
# [2,]  39.09091  37.87689  41.81134  43.82178  31.23631
# 南京      杭州      合肥      南昌      济南
# [1,] 118.80289 120.16169 117.23545 115.86453 117.00132
# [2,]  32.06473  30.28006  31.82687  28.68767  36.67163
# 郑州      武汉      长沙      广州      深圳
# [1,] 113.63135 114.31183 112.94533 113.27079 114.06611
# [2,]  34.75349  30.59843  28.23397  23.13531  22.54851
# 中沙      海口     重庆      成都      贵阳      昆明
# [1,] 114.39999 110.20642 106.5572 104.07122 106.63682 102.83967
# [2,]  15.91595  20.05006  29.5710  30.57628  26.65275  24.88595
# 拉萨      西安      兰州      西宁      银川      台北
# [1,] 91.12103 108.94631 103.84069 101.78427 106.23898 121.52487
# [2,] 29.65009  34.34744  36.06731  36.62348  38.49239  25.04218
citynames <- dimnames(geoData)[[2]]
geoData <- as.data.frame(t(geoData),row.names = 1:nrow(geoData),stringsAsFactors = FALSE)
colnames(geoData) <- c("lon","lat")
geoData$city <- citynames
symbol <- paste0("image://https://github.com/wcc3358/ChinaWeatherVisualization/blob/master/",weather.data$weatherc,".png")
tooltip <- paste(a=weather.data$area,"----------",weather.data$weather,weather.data$temperature,sep="<br>")
newdata <- data.frame(a=weather.data$area,symbol=symbol,tooltip=tooltip,stringsAsFactors=FALSE)
remapB(markPointData = newdata,
       geoData = geoData,
       color="Blue",
       title = "中国城市主要天气",
       markPointTheme = markPointControl(symbolSize=20,
                                         effectType=‘bounce‘,
                                         effect=T,
                                         color = "Random"))

展示结果如下图,这里只是截了一个屏,而其实这张图是动态的,天气图标会有一个浮动的效果,并且鼠标移动到天气图标上,会有一个文字效果展示具体的天气和温度数据。

6 小结

本文实现了全国主要城市天气可视化,这仅是REmap包的一个应用,它还可以用来做著名的百度迁徙图以及城市热力图等等。 REmap包的官方文档详见:https://github.com/Lchiffon/REmap

本文链接:http://www.cnblogs.com/homewch/p/5875148.html

github链接:https://github.com/wcc3358/ChinaWeatherVisualization

原文:http://mp.weixin.qq.com/s?__biz=MzI1NDMyMjgyMA==&mid=2247483793&idx=1&sn=a1126452e785422742952efadb0dd145&scene=4#wechat_redirect

时间: 2024-08-03 00:37:01

数据可视化之——REmap的相关文章

地理数据可视化:Simple,Not Easy

如果要给2015年的地理信息行业打一个标签,地理大数据一定是其中之一.在信息技术飞速发展的今天,“大数据”作为一种潮流铺天盖地的席卷了各行各业,从央视的春运迁徙图到旅游热点预测,从大数据工程师奇货可居到马云布道“DT”时代,“大数据”被推到了一个前所未有的高度,连国家领导人出访演讲都言必称大数据.地理信息数据天生具有大数据属性,作为整天和地理信息数据打交道的地信人自然不甘落后,地理大数据概念脱颖而出. 地理大数据是什么?大体来说就是把社会经济.自然资源.商业信息等但凡具有一点空间维度的数据一股脑

数据可视化-gojs插件使用技巧总结

随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如highcharts.js,echarts.js,d3.js,go.js- 数据可视化javascript插件对比 在HTML5标准支持下,web实现图形标准主要分为canvas和svg,上述的javascript图形库都是依赖2者之一作为底层库.Canvas基于像素,提供2D绘制函数,是一种HTML标

蒋步星:数据可视化技术的误区

所谓数据可视化是指把数据以图形动画以及地图等形式呈现出来,这样即直观又美观,易于理解从而看出数据背后的问题. 要做好数据可视化,需要两方面的能力.一是"艺术"能力,即知道什么样的数据用什么形式去表现最合适,该用柱图时不能用饼图,颜色搭配也要合理,另一个是"技术"能力,设计好的呈现方案还要能真地做出来,并且要把成本控制在可接受范围内.这里我们不深入讨论"艺术"问题,来看看考察和选择可视化技术中的一些常见误区. 误区|考察报表,挑可视化技术最好? 报

数据可视化工具

随着大数据的崛起,数据分析变得越来越重要,数据可视化工具能更直观地展示数据之间的联系和变化,是数据分析中不可或缺的工具. 1. iCharts iCharts是一个在线的数据可视化工具,被广泛应用于商业.经济.体育等领域的报告中.iCharts免费版本提供了一些基本的交互式图表样式,如果更使用高级的样式,则需要购买高级版本. 2. Fusion Charts Suit XT Fusion Charts Suit XT是一个专业的JavaScript图表库,可以用来创建90多种类型的图表,包括2D

ECharts, PHP, MySQL, Ajax, JQuery 实现前后端数据可视化

ECharts 下载js代码 工作原理浅析 在项目中引入ECharts 后台处理 数据库端MySQL PHP端 JQuery Ajax处理 ECharts 端处理 前端全部代码 演示结果 总结 最近要将后台数据库上的一些数据以可视化的方法显示到前端,找来找去,发现百度开发的这套图表工具库还不错,网上搜索了一下相关的教程,也算是实现了较为简单的demo.于是写下来,记录一下. ECharts ECharts是国人开发的一套前端的图表工具库,使用起来超方便,也很简单(当然了,前提是理解了其工作原理之

企业如何开展数据可视化建设

有关数据,我们知道,不加以处理运用就会沉淀在系统中,很难成为信息.信息如果得不到利用,就不能成为资源. 在市场竞争激烈.变数不定的大环境下,越来越多的企业意识到信息资源的重要性.信息,无论是来自企业内部还是市场外部,都能帮助企业在现有资源上提高运营效率,分析挖掘辅助决策的策略,做出符合行情的战略规划. 关于企业的数据可视化建设,这里分享一个大连华锐重工的案例,原文是大连华锐重工企业管理部副部长毕建林在帆软大数据可视化分析案例巡展上的演讲. 系统独立,数据利用率低 华锐重工从2001年进行信息化建

[原创.数据可视化系列之四]跨平台,多格式的等值线和等值面的生成

这些年做项目的时候,碰到等值面基本都是arcgis server来支撑的,通过构建GP服务,一般的都能满足做等值线和等值面的需求.可是突然有一天,我发现如果没有arcgis server 的话,我既然没法生成等值面等值线了.况且,还有许多别的要求: 没有arcgis server支持,arcgis server毕竟是很大一笔开销,个人基本无法负担: 跨平台,有的服务器是linux,有的是windows,看来,只能是java的类库了: 免费,生成等值线和等值面的程序不能有费用: 输出多种格式,既能

数据可视化的定义及使用注意

所谓数据可视化是对大型数据库或数据仓库中的数据的组态可视化,它是可视化技术在非空间数据领域的应用,使人们不再局限于通过关系数据表来观察和分析数据信息,还能以更直观的方式看到数据及其结构关系.数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析. 对同一类图形(例如柱状.圆环和蜘蛛图等)的长度.高度或面积加以区别,来清晰的表达不同指标对应的指标值之间的对

数据可视化简介

数据可视化参考流程 科学可视化的早期可视化流水线,描述了从数据空间到可视空间的映射,包含串行处理数据的各个阶段: 原始数据->数据分析->预处理数据->过滤->关注数据->映射->几何数据->绘制->图像数据 而后Card,Mackinlay,Shneiderman等人提出了信息可视化参考流程,后继几乎所有著名的信息科石化系统和工具都支持这个模型. 数据可视化设计的层次嵌套模型 第一层(问题刻画层):概括现实生活中用户遇到的问题: 第二层(抽象层):抽象相应