R(七): R开发实例-map热力图

第四章通过REmap包完成基于map分布图示例,前面提到REmap基于Echart2.0, 一方面在移动终端适应效果差,另一方面REmap提供的热力图仅支持全国及省市大版块map,基于上面的原因,参考 http://echarts.baidu.com/examples.html#chart-type-heatmap ,利用第四章清洗后的数据结合Echart3热力图控件开发完整可缩放地图的热力分布。

目录:

  • 效果图
  • 在线构建Echart3脚本包
  • R热力图页面模板
  • R脚本

效果图:



在线构建Echart3脚本包:

  • 在浏览器打开 http://echarts.baidu.com/builder.html, 选择 "下载" -->"在线构建", 在打开的页面选择要打包的图表,点击 “下载”
  • 简单起见,你可以选择所有控件后打包, build 完后保存为 “echarts3.min.js”

R热力图页面模板:


  • 参考Echart 热力图文档,在R脚本定义模板及Class, 保存命名:DemoTemp.R
  • 示例代码如下:

    setClass("my.map",
             representation(
               id = "character",
               option = "character",
               content = "character"
             ))
    
    my.mapH = function(data) {
    
      if (.Platform$OS.type == "windows") {
        locate = Sys.getlocale("LC_CTYPE")
        Sys.setlocale("LC_CTYPE", "eng")
      }
    
      if (!is.data.frame(data)) {
        stop("Map data should be a data frame.")
      }
    
      if (ncol(data) < 3 | nrow(data) == 0) {
        stop("Data should have at least 3 columns and 1 row")
      }
    
      if (!is.numeric(data[1, 1]) |
          !is.numeric(data[1, 2]) |
          !is.numeric(data[1, 3])) {
        data[, 1] = as.numeric(data[, 1])
        data[, 2] = as.numeric(data[, 2])
        data[, 3] = as.numeric(data[, 3])
      }
    
      heatdata = apply(data, 1, function(x) {
        out = sprintf(‘[%s,%s,%s]‘, x[1], x[2], x[3])
        return(out)
      })
    
      heatdata = paste(heatdata, collapse = ",\n")
    
      ### write remap object
      output = new("my.map")
      [email protected] = paste(‘ID‘, format(Sys.time(), "%Y%m%d%H%M%S"),
                        round(proc.time()[3] * 100), sep = "_")
    
      [email protected] = html.data.H$option
      head = html.data.H$head
      foot = html.data.H$foot
    
      if (.Platform$OS.type == "windows") {
        Sys.setlocale("LC_CTYPE", "chs")
      }
    
      [email protected] = sub("forChange", "?", [email protected])
    
      [email protected] = sub("heatMapData",
                          heatdata, [email protected])
    
      ## optionNameData
      [email protected] = sub("optionNameData",
                          paste0("option", [email protected]), [email protected])
      outputFoot = sub("optionNameData",
                       paste0("option", [email protected]), foot)
    
      [email protected] = strsplit([email protected], "kkkmmm")[[1]][2]
      [email protected] = paste(head, [email protected], outputFoot, sep = "\n")
    
      if (.Platform$OS.type == "windows") {
        Sys.setlocale("LC_CTYPE", locate)
      }
      return(output)
    }
    
    html.data.H = list(
      head = "<html>
      <head>
      <meta charset=\"utf-8\">
      <style type=\"text/css\">
      body {
      margin: 0;
      }
      #main {
      height: 100%;
      }
      </style>
      </head>
      <body>
      <div id=\"main\"></div>
      <script src=\"./js/echarts.js\"></script>
      <script src=\"./js/bmap.js\"></script>
      <script src = \"http://api.map.baidu.com/api?v=2.0&ak=密钥\"></script>
      <script>
      var myChart = echarts.init(document.getElementById(\"main\"));
    
      ",
      option = "forChangekkkmmm
      var heatData = [heatMapData];
      var optionNameData =
      {
      animation: false,
      bmap: {
      center: [103.855096, 36.056805],
      zoom: 5,
      min: 4,
      max:12,
      roam: true
      },
      visualMap: {
      show: true,
      top: ‘top‘,
      min: 1,
      max: 50,
      seriesIndex: 0,
      calculable: true,
      inRange: {
      color: [‘blue‘, ‘blue‘, ‘green‘, ‘yellow‘, ‘red‘]
      }
      },
      series: [{
      type: ‘heatmap‘,
      coordinateSystem: ‘bmap‘,
      data: heatData,
      pointSize: 6,
      blurSize: 8
      }]
      }",
      foot = ";
      myChart.setOption(optionNameData);
      </script>
      </body>
      </html>"
      )

R脚本:


  • R脚本代码,demo.rda 为清洗后保存的数据,示例

    run <- function(...) {
      map_name <- my.writeMapH()
      out(map_name)
    }
    
    my.writeMapH <- function() {
    
      path = c("/var/www/html")
      file_name = paste0("3.0/Demo")
      full_path = paste0(path, "/", file_name, ".html")
      if (file.exists(full_path)) {
        return(file_name)
      }
    
      source("/var/FastRWeb/web.R/DemoTemp.R")
      tmp <- load("/var/FastRWeb/web.R/demo.rda")
      data <- data.frame(pdata$lon,pdata$lat,c(1))
      out <- my.mapH(data)
    
      writeLines([email protected], full_path, useBytes = T)
      return(file_name);
    }

  • 通过FastRWeb框架调用R脚本成功后,返回的是在/var/www/html目录下生成的文件名
  • client再次发起请求,调用html文件
  • 注意: 在/var/www/html 目录下部署脚本引用的 js 文件
时间: 2024-10-16 14:47:23

R(七): R开发实例-map热力图的相关文章

C#软件开发实例.私人订制自己的屏幕截图工具(七)添加放大镜的功能

上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能 由于截图时可能需要精确截取某一部分,所以需要放大镜的功能,这样截取的时候才更容易定位截图的位置. 添加PictureBox,name属性设置为"pictureBox_zoom": 在"Form1_Load"事件处理函数中添加以下代码: //设置放大镜的大小 this.pictureBox_zoom.Width = this.ZoomBoxWidth; this.pictureBox_zoom

Android开发实例之miniTwitter登录界面的实现

原文: http://www.jizhuomi.com/android/example/134.html 本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面. miniTwitter登录界面效果图 先贴上最终要完成的效果图: miniTwitter登录界面的布局分析 首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分. 第一部分是一个带渐变色背景的LinearL

Android系统Google Maps开发实例浅析

Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用.Google Map的服务体现在两个方面:地图API和位置API.使用Android Maps API(地图API)和Android Location API(定位API)可以轻松实现实用而且强大的功能. 我的位置:“我的位置”在地图上显示你的当前位置(通常在 1000 米范围之内).即使没有 GP

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

ZabbixAPI+django+nginx简单的二次开发实例(五)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(四) 步骤五,图形展示 写一个RRDtool图形展示的脚本,由于要和view.py联动,我放在了appname的文件夹下 cd /API/web/pos/moniter vim rrddraw.py #!/usr/bin/env python #coding=utf-8 import rrdtool #ping的图形 def itemping(data): pngname = str(data['pname']) #图

开机动画 看图学Android---Android 开发实例教程五

Android实例图解教程目录 http://blog.csdn.net/wyx100/article/details/45061407 在<开发一个新的android界面.界面跳转 看图学Android---Android 开发实例教程三.四>基础完成开机动画,开机界面的图片,在5.5秒内逐渐消失,显示主界面. 只修改StartActivity.java中代码以下部分 StartActivity.java源代码 package com.example.helloword; import an

Android Widget 开发实例:桌面便签程序的实现详解和源码

桌面便签软件是Android上常用软件的一种,比如比较早的Sticky Note,就曾非常流行,而实际上使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 同时本程序提供完整的工程源码下载 免费下载地址在 http://linux.linuxidc.com/ 用户名与密码都是www.linuxidc.com 具体下载目录在 /pub/Android源码集锦/2011年/10月/An

实现Android半透明Menu效果的开发实例

不知道大家是否用过天天动听,对于它界面上的半透明Menu效果,笔者感觉非常漂亮.下面是天天动听半透明Menu的截图,欣赏下吧: 感觉还不错吧?那么如何实现这种半透明Menu效果呢?本文就重点讨论并给出这种Menu的具体代码实现过程. 首先分析下实现这种半透明Menu所需做的工作,并进行合理分解: 1.  利用Shaper设置一个半透明圆角背景. 2.  定义Menu布局,主要就GridView,把图标都放在这个GridView. 3.  Menu事件, 通过PopupWindow或者AlertD

Lync开发实例4&mdash;组织架构同步

这节我们来看看怎么让Lync从AD中同步组织架构. 在第1节中,我们知道了怎么在Lync中显示指定用户.那么如果我们稍微扩展下,只要我们能想办法读到AD中用户和OU的信息,再将其显示在Lync的窗口中,那么我们的目的就能达成了. 要显示出Lync用户,就要知道用户的Sip属性值,我们打开AD中的用户属性. 发现msRTCSIP-PrimaryUserAddress值是确定用户Lync的SIP值的属性. 知道了这点,那就想办法用C#来读取AD中用户这个属性吧. 关于C# AD(Active Dir