前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >玩转数据地图系列之——地图上的迷你条形图

玩转数据地图系列之——地图上的迷你条形图

作者头像
数据小磨坊
发布于 2018-04-11 07:45:33
发布于 2018-04-11 07:45:33
2.6K00
代码可运行
举报
文章被收录于专栏:数据小魔方数据小魔方
运行总次数:0
代码可运行

最近忙的厉害,产量下降的有点严重,感谢各位还没取关的小伙伴儿。

一周前更新了一篇数据地图上的气泡散点图的内容,不知怎地,这段时间就是跟地图死磕上了,今天还是数据地图,不过是在数据地图上呈现条形图、柱形图。

之前的一篇因为有现成的作图包支持,geom_scatterpie函数不用花费太大力气就解决了数据地图上的气泡散点图问题。

可是到目前为止我还没有发现支持对应坐标位置的条形图、柱形图,这一篇是参考了知乎上大神提供的思路。

加载包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(maptools)
library(ggplot2)
library(plyr)
library(ggmap)

导入地图素材及省会城市经纬度数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
china_shp <-readShapePoly("c:/rstudy/bou2_4p.shp")    
china_map <- fortify(china_shp)     
province_city <- read.csv("c:/rstudy/chinaprovincecity.csv") #城市经纬度数据 

#新建三个指标,2015年和2016年的某经济度量指标(虚构)N15、N16和环比增长率Ratio。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
province_city1<-mutate(province_city,N15=runif(34,min=500,max=1000),N16=runif(34,600,1100),Ratio=round((N16-N15)/N15,3))
province_data<-province_city1[sample(nrow(province_city1),10),]

合并后的数据结构如下,随即选取了10个城市的14、15年度某项经济指标(虚构)以及同比增长率。

ggplot的现有图层图形中是没有直接根据点坐标生成条形图、柱形图的,所以这里我们只能曲线救国,使用线条图和误差线来进行模拟。

首先来画底图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+
geom_polygon(aes(x=long, y=lat, group=group), data=china_map, fill="white", colour="grey60")

接下来使用geom_linerange函数(也就是条线图函数)进行各个坐标点的模拟柱形绘制。

线画出14年的指标值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+
geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+
geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+N15/max(N15,N16)*5),size=5,color="orange",alpha=0.8)

再叠加一次16年的指标值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+
geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+
geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",alpha=0.8)+
geom_linerange(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",alpha=0.8)

接下来我们来对已经塑造好的双柱条形图进行美化操作,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
windowsFonts(myFont = windowsFont("微软雅黑")) 
ggplot()+
geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+
geom_linerange(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",alpha=0.8)+
geom_linerange(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",alpha=0.8)+
geom_text(aes(x=jd,y=wd-0.6,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+
theme_nothing()+
annotate("text", x=105, y=52, label="● 2015", color= "#5B88A0", size=8)+ 
annotate("text", x=105, y=49, label="● 2016", color= "#FB882C", size=8)

其实最初在网上看到该图(大概是刘万祥老师的博客,在此感谢老师的启发),他的做法是使用geom_errbar图层函数,也就是误差线图层函数,其实理念是一致的。这里给出原方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+
geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+
geom_errorbar(data=province_data,aes(x=jd-0.5,ymin=wd,ymax=wd+0.7*N15/max(N15,N16)*5),size=3,color="#5B88A0",width=0,alpha=0.8)+
geom_errorbar(data=province_data,aes(x=jd+0.5,ymin=wd,ymax=wd+0.7*N16/max(N15,N16)*5),size=3,color="#FB882C",width=0,alpha=0.8)+
geom_text(aes(x=jd,y=wd-0.6,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+
theme_nothing()+
annotate("text", x=105, y=52, label="● 2014", color= "#5B88A0", size=8)+ 
annotate("text", x=105, y=49, label="● 2015", color= "#FB882C", size=8)

其实如果能换个思路,使用geom_errorh函数,想必一定了以做出横向的条形图。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ggplot()+
geom_polygon(aes(x=long, y=lat,group=group),data=china_map, fill="white", colour="grey60")+
geom_errorbarh(data=province_data,aes(x=jd,y=wd,xmin=jd-3,xmax=jd+3*N15/max(N15,N16)),size=3,color="#5B88A0",height=0,alpha=0.8)+
geom_errorbarh(data=province_data,aes(x=jd,y=wd-0.8,xmin=jd-3,xmax=jd+3*N16/max(N15,N16)),size=3,color="#FB882C",height=0,alpha=0.8)+
geom_text(aes(x=jd+0.2,y=wd+1,label=paste0(province_data$province,ifelse(Ratio>0,"▲","▼"),Ratio*100,"%")), data=province_data,family="myFont",size=2.5)+
theme_nothing()+
annotate("text", x=105, y=52, label="● 2015", color= "#5B88A0", size=7)+ 
annotate("text", x=105, y=50, label="● 2016", color= "#FB882C", size=7)

以上思路仅供大家大家参考,就像伟大的哈德利.威科姆所说的一样,ggplot只是给你了一个发挥想象力的空间,无拘无束的发挥想象力,总能创造出令人惊讶的作品。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【精选】计算机网络教程(第7章网络安全)
公私密钥(或非对称密钥)和对称密钥是在密码学中用于加密和解密数据的两种不同的密钥类型。
命运之光
2024/03/20
1160
计算机网络概论笔记
网络结构:网络的网络 本地网络 三个本地网络节点的网络 全国通信网络:本地网络的网络
青灯古酒
2023/10/16
2080
计算机网络概论笔记
【网络安全】网络防护之旅 - 非对称密钥体制的解密挑战
网络安全是一门关注计算机系统和网络安全的专业学科。其首要任务是维护信息系统的核心价值,包括机密性、完整性和可用性,以对抗未经授权的访问、破坏、篡改或泄露的威胁。
SarPro
2024/02/20
2550
【网络安全】网络防护之旅 - 非对称密钥体制的解密挑战
浅谈密码学
密码学是研究如何隐密地传递信息的学科。那怎样才能隐密地传递信息呢?密码学里的答案就是对原文进行加密。主流的加密主要分成两大类:对称加密和非对称加密。
小蜜蜂
2019/07/14
7180
你真的懂网络安全吗?
计算机网络在给我们带来便利的同时,也存在很多安全隐患,比如信息伪造,病毒入侵,端点监听,SQL 注入等,给我们日常生活造成很严重的影响。
ICT系统集成阿祥
2024/12/03
980
你真的懂网络安全吗?
Java - 深入理解加密解密和签名算法
Java应用接口安全性问题可能来源于多个方面,包括但不限于数据加密、身份验证、访问控制、输入验证等。下面我会对这些问题进行详细分析,并提供相应的解决方案和最佳实践。
小小工匠
2024/05/25
4190
Java - 深入理解加密解密和签名算法
【愚公系列】软考中级-软件设计师 010-计算机系统知识(加密技术和认证技术)
加密技术和认证技术是计算机系统中保护数据安全和身份识别的重要手段。下面分别介绍这两类技术。
愚公搬代码
2024/01/22
2470
【愚公系列】软考高级-架构设计师 064-信息安全技术
信息安全技术是一种涉及保护计算机系统、网络和数据不受未经授权的访问、使用、泄露或破坏的技术和方法。信息安全技术的主要目标是确保信息的机密性、完整性和可用性,防止信息在传输和存储过程中遭到未经授权的访问或修改。
愚公搬代码
2024/07/08
2340
计算机网络安全思考题
该密码体制有一个参数n。在加解密时,同样把英文字母映射为0-25的数字再进行运算,并按n个字母一组进行变换。明文空间、密文空间及密钥空间都是长度为n的英文字母串的集合,因此可表示
十二惊惶
2024/02/28
3840
计算机网络安全思考题
OfferKiller | Https 为什么是安全的?(上)
Https 为什么是安全的? 这可以说是一个高频面试题了。但要完全说明白这个问题,你需要具备一些前置知识。所以在本篇中,暂时不会涉及到 Https 的具体通信流程。
路遥TM
2021/08/31
5450
再有人问你网络安全是什么,把这篇文章丢给他!
网络安全:指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。
Java程序猿
2023/02/23
8060
计算机网络安全技术
浅谈计算机网络技术安全 本文从计算机网络安全的基本知识出发,分析影响计算机网络安全的因素,并提出针对网络安全的三种技术,比较各种技术的特色以及可能带来的安全风险或效能损失,并就信息交换加密技术的分类作以分析,针对PKI技术这一信息安全核心技术,论述了其安全体系的构成。 关键词:网络安全防火墙加密技术PKI技术 虽然计算机网络给人们带来了巨大的便利,但由于计算机网络具有联结形式多样性、终端分布不均匀性和网络的开放性、互连性等特征,致使网络易受黑客、恶意软件和其他不轨的攻击,所以网上信息的安全和保密是一个至
企鹅号小编
2018/01/10
5.7K0
计算机网络安全技术
【计算机网络六】HTTPS协议原理
因为HTTP协议内容均是按照文本的方式进行明文传输的,这就导致在传输过程中很容易出现一些信息被篡改的情况。HTTPS协议通过在HTTP协议的基础上引入了一个加密层解决了这个问题。
小皮侠
2024/12/17
1841
【计算机网络六】HTTPS协议原理
【愚公系列】软考高级-架构设计师 012-加密技术和认证技术
加密技术和认证技术是网络安全和数据保护领域的两个核心组成部分。它们都旨在保护数据的安全性和完整性,但各自关注的方面和实现的方式不同。
愚公搬代码
2024/06/08
1580
HTTP和HTTPS的区别【面试常考】[通俗易懂]
HTTP和HTTPS是计算机网络中很重要的知识点,面试的时候很容易被问他们的区别,可能每个人都会有自己理解;
全栈程序员站长
2022/11/10
1.3K0
【Linux|计算机网络】HTTPS工作原理与安全机制详解
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。
用户11316056
2024/11/19
3190
【Linux|计算机网络】HTTPS工作原理与安全机制详解
【网络安全】网络防护之旅 - 点燃网络安全战场的数字签名烟火
网络安全是一门关注计算机系统和网络安全的专业学科。其首要任务是维护信息系统的核心价值,包括机密性、完整性和可用性,以对抗未经授权的访问、破坏、篡改或泄露的威胁。
SarPro
2024/02/20
1810
【网络安全】网络防护之旅 - 点燃网络安全战场的数字签名烟火
系统分析师信息安全知识点
Stub区域是一种比较特殊的区域,因为它不能像其他区域那样,经过该区域中的ABR接收其他OSPF AS路由。在Stub区域的内部路由器仅需要配置一条到达该区域ABR的默认路由(0.0.0.0.0.0.0.0)来实现与同一AS中不同区域间的路由,这样可使得这些区域中的内部路由器的路由表的规模以及路由信息传递的数量都会大大减少。
小马哥学JAVA
2023/07/15
2590
系统分析师信息安全知识点
密码学
讲到计算机密码学,就不得不从网络的发展说起,网络初期,主要用于科学研究,只在几个大学之间互联网络,使得设计之初并没有考虑到数据传输安全问题。 随着网络发展,特别是从网络应用于军事,再到后来进入人们的日常生活,网络安全问题日益突出,从而发展出计算机密码学。 到目前为止,不论是系统开发还是应用开发,只要有网络通信,很多信息都需要进行加密,以防止被截取、篡改。所以了解密码学的相关知识,了解在何时使用何种密码技术,已经成为开发人员必不可少的知识。 本篇文章将会科普一下有关密码学的相关知识。
1ess
2021/10/29
7520
嵌入式基础知识-信息安全与加密
本篇来介绍计算机领域的信息安全以及加密相关基础知识,这些在嵌入式软件开发中也同样会用到。
xxpcb
2023/09/11
4570
嵌入式基础知识-信息安全与加密
推荐阅读
相关推荐
【精选】计算机网络教程(第7章网络安全)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档