R-ggplot2-如何将map与其他类型图表绘制在一张图里

0. 今日绘图目标

将map与柱状图绘制在一张图中。

1. 所需R-packages

require(ggplot2)
require(raster)
require(ncdf4)
require(reshape2)
#软件包安装方式
install.packages('ggplot2')
install.packages('raster')
install.packages('ncdf4')
install.packages('reshape2')

2. 示例数据

2.1 ret_box #包括long, lat, cor(用于控制空间点的大小)

        long       lat           cor
1   319.9667 -21.88330 -0.2909924846
2   233.6058  49.80639 -0.6612940908
4   322.1500 -33.38330 -0.6554984115
5   320.2167 -34.81670 -0.6140925293
6   322.2167 -36.71670 -0.6682152245
7   289.8667  46.26670 -0.2671691399
8    67.7900  34.12000 -0.4361970541
9    74.4850  32.02500 -0.6861450533
10   74.5330  38.35000 -0.8576893172
11   60.0500  42.05000 -0.7424349943
12   74.4500  38.26700 -0.8279314389
13   66.7830  39.70700 -0.7111693976
14  253.0167  32.65000 -0.6827918702
15  296.3333  48.80000  0.4564051335
16  253.4333  25.76670 -0.7326677653
17  271.9333  48.36670 -0.2170552270
18  251.5667  32.96670 -0.6881968791
19  113.1503 -17.31530  0.7252337143
20  113.6964 -20.96580  0.8489313090
21   75.1170  31.43300 -0.7266186825
22   63.8330  39.78300 -0.6851615075
23   66.3940  38.33600 -0.7178798947
24   61.3000  48.05000  0.4712528403
25   70.0900  31.43000 -0.7278034435
26   66.9370  38.45000 -0.7069809031
27   75.6700  29.81000 -0.5334788720
28   67.6990  45.22400 -0.5065231875
29   67.5750  45.17200 -0.7963865354
30   67.6910  45.22800 -0.5065231875
31   62.4830  36.53300  0.5342509122
32   63.2670  40.63300 -0.8255034957
33   63.0990  40.28100 -0.7726425553
34   62.9590  40.31500 -0.7262693955
35   63.2810  40.59900 -0.8237684070
36   61.7810  38.01100  0.2010569215
38   61.2030  40.26700  0.0100699356
40  271.7167  50.41670 -0.8218614332
41  273.3333  50.33330 -0.6497722055
42  251.3333  33.33330 -0.4800369132
43  252.7500  32.60000 -0.6543348992
45  254.3569  47.53861 -0.2109533665
46   70.5090  40.60700 -0.4188613454
47   63.5670  36.45000  0.5692960424
48   71.8300  44.58000  0.1195021740
49   71.8300  44.58000  0.1195021740
50   63.7500  35.95000  0.3014936360

2.2 全球地图数据-格式 .shp

全球地图下载地址
注:该数据直接导入R是不显示坐标的

class       : SpatialPolygonsDataFrame 
features    : 7 
extent      : -180, 180, -55.72057, 83.62303  (xmin, xmax, ymin, ymax)
crs         : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
variables   : 1
names       :       Region2 
min values  :        Africa 
max values  : South America 

3. 数据预处理

3.1 ret_box 预处理

  ret_m = melt(ret_box,c('long','lat'))
  ret_m$long = ret_m$long - 180
  
  index_neg = which(ret_m$value <=0)
  index_pos = which(ret_m$value >0)
  
  ret_pos = ret_m[index_pos,]
  ret_neg = ret_m[index_neg,]
  
  ret_pos$cuts = cut(ret_pos$value, breaks = c(0,0.25,0.50,0.75,1.00))

  ret_neg$cuts = cut(ret_neg$value, breaks = c(-1.00,-0.75,-0.5,-0.25,0))
  
  shape_neg = rep(25,length(index_neg))
  shape_pos = rep(24,length(index_pos))
  
  ret_pos$shape = shape_pos
  ret_neg$shape = shape_neg
  
  
  ret_box = rbind(ret_neg,ret_pos)
  ret_box$type = c(rep(2,nrow(ret_neg)),rep(3,nrow(ret_pos)))
  
  ret_box2 = ret_box
  ret_box2$type = 1 #控制柱状图在第一个facet 中
  
  neg_index = which(ret_box2$value <0)
  pos_index = which(ret_box2$value >0)
  
  ret_box2$fill = 'blue'
  ret_box2$fill[neg_index] = 'red'

3.1 Global map数据预处理

world = shapefile('...地图路径地址...')
prov_map = fortify(world,region = "Region2") #Region2 为地图中类的名称

prov_map2 = rbind(prov_map,prov_map)
prov_map2$type = rep(c(2,3),each = nrow(prov_map)) # 2,3 为画在第几个分面中

4. 正式绘图

color_map = c('#E8002D','#FE2725','#FE5B34','#FEB666',
                '#6CBDE3','#177ABD','#2A4FA0','#013F87')

a = ggplot()+
  geom_histogram(data = ret_box2, aes(x = value,fill = fill),binwidth = 0.25,center = 0.125)+
  geom_polygon(data=prov_map2,aes(x=long, y= lat,group = group),
               colour='black',fill = 'transparent',size = 0.5  )+
  coord_fixed(1.3)+
  geom_point(data = ret_box,aes(x = long, y = lat,color = cuts,size = cuts))+
  scale_color_manual(values = color_map)+
  facet_wrap(~type, nrow = 3,scales = 'free')

png('...图件输出路径...',
      width = 20,
      height = 20,
      units = 'cm',
      res = 1000)
print(a)
dev.off()   

5. 出图示例

最终图件示例

6. 技术支持-微信

大家有看不懂的地方欢迎在文下评论,或者可以私戳我哈~


微信联系方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351