标准中国地图的长宽,R-ggplot2 标准中国地图制作

浏览:3541   发布时间: 2022年05月05日

R-ggplot2 标准中国地图制作

「来源: |植物与根际微生物生态 ID:lida20200225」

由于基础图表绘制系列推文还在加紧准备中,所以这期推文还是对一些感兴趣的图表进行绘制,这期涉及空间图表绘制,主要涉及知识点如下:

ggplot2 + sf 中国标准地图绘制cowplot 包实现地图子图插入ggplot2 + sf 中国标准地图绘制

本期的绘图我们是按照如下图表进行绘制的(该图来自朋友公号):

其实我很早就想试着用R进行此类图表的绘制了,但由于强大的Arcgis和绘图进度等原因,导致迟迟没有进行,这期就进行此类图表的绘制。注:图中散点的经纬度信息已从朋友那获知,但涉及具体数据则是虚构的。

地图读取和散点标注

这里的中国地图格式为 geojson 格式,还是使用sf包进行灵活读取,具体代码如下:

china_shp <- "中国省级地图GS(2019)1719号.geojson"nine <- "九段线GS(2019)1719号.geojson"china <- sf::read_sf(china_shp)nine_line <- sf::read_sf(nine)数据预览如下(部分):

接下来我们进行探索性绘图,主要使用geom_sf() 进行绘制,代码如下:

library(ggspatial)ggplot() + geom_sf(data = china,fill="NA",size=1,color="black") + geom_sf(data = nine_line) + coord_sf(crs = "+proj=laea +lat_0=40 +lon_0=104")+ annotation_scale(location = "bl") +# spatial-aware automagic north arrow annotation_north_arrow(location = "tl", which_north = "false", style = north_arrow_fancy_orienteering)这里可以看到,我们没有使用常规的WGS84坐标,而是采用 +proj=laea +lat_0=40 +lon_0=104 进行绘制,可视化结果如下:

比例尺和指北针的添加,则是依靠ggspatial包。

散点数据的读取

由于只获得数据经纬度信息,其他数据均为虚构,数据预览如下:

这里注意点,要想使数据绘制在地图上,我们需使用st_as_sf()对其进行转换,处理:

scatter_df_tro <- st_as_sf(scatter_df,coords = c("lon", "lat"),crs = 4326)结果如下:

注意红色框中的内容

接下来将数据在地图中显示,具体代码如下:

ggplot() + geom_sf(data = china,fill="NA",size=.5,color="black") + geom_sf(data = nine_line) + geom_sf(data = scatter_df_tro,aes(fill=class,size=data),shape=21,colour='black',stroke=.25)+ coord_sf(crs = "+proj=laea +lat_0=40 +lon_0=104")+ scale_fill_manual(values = c("#E21C21","#3A7CB5","#51AE4F"))+ scale_size(range = c(1,5))+ annotation_scale(location = "bl") +# spatial-aware automagic north arrow annotation_north_arrow(location = "tl", which_north = "false", style = north_arrow_fancy_orienteering)+ theme_linedraw()+ theme(text = element_text(family = 'Times_New_Roman',size = 12,face = "bold"), panel.background = element_rect(fill = NA), panel.grid.major = element_line(colour = "grey50"),#axis.line = element_line(size = 1, colour = "black"), panel.ontop = FALSE )可视化结果如下:

这里还存在如下问题:

(1) 尽量将南海部分放置在右下角(虽然这样也可以)

(2) 图例只是默认的,没有进行定制化操作,影响美观

cowplot包子图添加

cowplot包可是实现对绘图结果的任意组合,很适合绘制地图子图的绘制,这里直接给出绘图代码,如下:

library(cowplot)map <- ggplot() + geom_sf(data = china,fill=NA) + geom_sf(data = nine_line,color='gray50',size=.8)+ geom_sf(data = scatter_df_tro,aes(fill=class,size=data),shape=21)+ coord_sf(ylim = c(-2387082,1654989),crs="+proj=laea +lat_0=40 +lon_0=104")+ scale_fill_manual(values = c("#E21C21","#3A7CB5","#51AE4F"))+ scale_size(range = c(1,5))+ annotation_scale(location = "bl",text_face = "bold", text_family = "Times_New_Roman") +# spatial-aware automagic north arrow annotation_north_arrow(location = "tl", which_north = "false", style = north_arrow_fancy_orienteering, )+#定制化图例:这一步可以设计出亮眼的图例哦 guides(fill = guide_legend(override.aes = list(size = 3), title = "", label.position = "right", ncol=3, ), size = guide_legend( title = "", label.position = "right", ncol=5)) + labs( caption = 'Visualization by DataCharm')+#theme_bw()+ theme( text = element_text(family = 'Times_New_Roman',size = 18,face = "bold"), panel.background = element_rect(fill = NA), panel.grid.major = element_line(colour = "grey80",size=.2), legend.key = element_rect(fill = "white"), legend.position = "bottom", )nine_map <- ggplot() + geom_sf(data = china,fill='NA') + geom_sf(data = nine_line,color='gray70',size=1.)+#geom_sf(data = scatter_df_tro,aes(fill=class,size=data),shape=21,colour='black',stroke=.25)+ coord_sf(ylim = c(-4028017,-1877844),xlim = c(117131.4,2115095),crs="+proj=laea +lat_0=40 +lon_0=104")+ theme(#aspect.ratio = 1.25, #调节长宽比 axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank(), panel.grid = element_blank(), panel.background = element_blank(), panel.border = element_rect(fill=NA,color="grey10",linetype=1,size=1.), plot.margin=unit(c(0,0,0,0),"mm"))gg_inset_map = ggdraw() + draw_plot(map) + draw_plot(nine_map, x = 0.8, y = 0.15, width = 0.1, height = 0.3)可视化效果如下:

这里需注意的是xlim和ylim的设置,具体值都是在 +proj=laea +lat_0=40 +lon_0=104 投影坐标系下的值,而常规坐标转不同坐标下的操作也很简单,可使用st_transform进行操作。如下:

df2 <- tibble(lon = c(105,125), lat = c(3,25), ) df2 %>% st_as_sf(coords = c("lon", "lat"), crs = 4326) -> df2_sfdf2_sf_pre <- sf::st_transform(df2_sf,crs="+proj=laea +lat_0=40 +lon_0=104")df2_sf_pre即可获取对应值,进而进行范围设置。

总结

该期推文也是基于自己对地图的喜欢进行绘制,后面还是会以基础图表的绘制为主,希望大家能够喜欢,多多支持。更多想法可以在 读者讨论 区进行留言告知。

发表评论 发表

新书|《地图生死劫》:以地图的经纬勾勒中国史

最近,中国古代地图文化研究学者、地理科普作家前卫的新书《地图生死劫:天命王权》由中国地图出版社出版。

这本书以中国历朝历代历史进程为轴,通过历代王朝更迭和帝王传承体系,撷取与地图相关的标志性事件和重要历史人物的史籍记载并加以考证,以期还原中国地图发展历史的本来面目,并配以相关的古图和历朝版图。

全书共有18个篇章,即:禹王天下、夏商之殇、西岐凤飞、祸起春秋、秦皇幻梦、汉宫秋色、回眸东都、三国烟云、两晋遗珠、纷乱南北、魂断隋宫、大唐芳华、五代斜阳、汴梁往事、遥望中原、圆月弯刀、航海时代、大清余晖,以地图的经纬勾勒中国史。

作者在书中着意呈现在历史中重要的节点,古人怎样依据地图呈现的地理、环境、人居状态进行筹谋。作者前卫,军旅出身,中国古代地图文化研究学者、国家版图专家评审组专家。出版著作有:《地图生死劫:天命王权》《地图:谁主沉浮》《就在梦里来去》等。

新书《地图生死劫:天命王权》书封。地图:王朝更迭的见证我们在影视剧中常常看在军营的帐篷中摆一个巨大的沙盘,几位将军和智囊们运筹帷幄,而在最近播出的《大宋宫词》中,前几集就讲到当时还是皇子的赵恒在一次治水中为疏导黄河,开堤放水时,没有从地图有效判断下游形势,导致下游村落被淹没,因而给朝堂上反对他的势力落了口实。

在古代历史中,地图代表着一军对于地形的掌握和把控,因而在大大小小的战役中发挥着关键作用。

比如在汉代,汉武帝刘彻的登场,汉武帝对版图的渴望和对地图的使用,首先就体现在军事上。在《地图生死劫》中,作者写到:“关于武帝对地图的重视和应用,试举几例。天汉二年(前99年),汉军三万骑兵出酒泉,在天山攻击匈奴右贤王。担任辎重运输任务的将领是李陵,武帝亲自召见,并嘱托其将所经过的山川地形全部画出来,制作成地图,第一时间派部下快马上报朝廷。这证明了武帝深知用兵离不开地图,精确的地图才是制胜的关键。”

时间转到被讨论最多的三国时期,地图也同样在发挥重大作用,前卫书中写道:“孙权发展海上交通很是值得一提,地图当然在其中大显身手。在孙吴之前,北部沿海的航线已经分段开通,但由于东汉时期江左地区经济文化比较落后,既没有形成强大的政治中心和大都会,也没有开通航路。孙吴立国后,孙权频繁通使辽东,使江左与辽东地区的直通航线得以开通。这条航道,从建康沿长江东下,在长江口北端海门附近之料角转向北行驶,傍黄海海岸北行,绕过山东半岛东端的成山角,进人登州大洋,再沿庙岛列岛北上,渡渤海海峡到达辽东半岛南端的都里镇。孙吴出使辽东的船队即停泊于此,在这里进行互市。再由此处上岸由陆路至公孙渊首府襄平。这条海道的开通,便利了江左地区与东北地区的交通。很明显,不去绘制航海图,没有地图的帮助,这种海上交通怎么可能建立起来,海上贸易又如何繁荣呢?”

三国演义中的 张松献地图。作者前卫认为,中国地图的历史并非沉默的工具和被遗忘的记忆,而是人类文明孜孜以求的见证者和民族繁衍生息的参与者,更是国家历经沧海桑田的追随者。了解地图的前世今生,必然由此可窥视历史的另一种真实面孔。历史中的地图编撰者们

地图从诞生之初就有着强烈的军事与政治意味,而且在古代中国,空间常常会超越单纯的地域的概念和权利、仪轨等相联系,有着强烈的象征意义。

以周王朝来看,前卫认为:“极度兴盛和完全衰败共存、高度强权和弱势同在的一个王朝,非周天下莫属。为什么在始皇帝统一中国之前各路枭雄始终无法动摇周王朝,我们可以从三个层面来理解:一是王权理念的遵从;二是宗族势力的制衡;三是诸侯各得其所的追逐。周王朝虽然风雨沧桑,各路诸侯纷纷踏上争霸之路,但大家始终都秉持一个中国原则,有着天下一统、不容挑衅的共识。因此,周天下始终维持了国家统一的版图,让这种传承绵延后世,也就形成了中华文明帝王传承体系中最独特的一种文化,即认定一个王朝和帝王的历史地位,必须以国家是否统一、疆域是否广袤、主权是否完整为核心来作衡量标准。”

历史上,很多名家也投入到地图的编撰事业中,如晋代的裴秀。裴秀认为,地图的出现由来久远,但地图制作最大的弊病是很多图的绘制都依赖图书作为参考,数据并不翔实。晋王朝兴起统一天下后,很尴尬的一个现实就是地图存量严重不足,仅有的一些图,也无非是汉代《舆地》及《括地》等杂图。这些图既不设统一比例,又不考证方位,名山大川的记载也不完备。虽然有粗略的形制,但都不精当,不能作为朝廷推行国策的依据。

于是裴秀以《禹贡》为参考,对《禹贡》的记载做了详细的考订,最终将《禹贡》记载的山海河流、平原洼地、池塘沼泽、古代的九州和现代的十六州及郡国县邑、疆界乡村,还有古国盟会的旧地名、水路陆路都绘制出来,编制成地图18篇,是为《禹贡地域图》。

现在《禹贡地域图》已经散逸,但是裴秀提出的“地图制图六法”保存了下来,一为“分率”,用以反映面积、长宽之比例,即今之比例尺,二为“准望”,用以确定地貌、地物彼此间的相互方位关系;三为“道里”,用以确定两地之间道路的距离;四为“高下”,即相对高程;五为“方邪”,即地面坡度的起伏;六为“迂直”,即实地高低起伏与图上距离的换算。

这六条原则的综合运用正确地解决了地图比例尺、方位、距离及其改化问题,第一次明确地建立了中国古代地图绘制理论,在中国和世界地图制图学史上有着重要地位。时至今日,除经纬网和地球投影外,现代地图学中地图的主要因素,裴秀在西晋时就几乎全提了出来。因此,称他是“中国科学制图学之父”也是名副其实。

汉代全国性的地图称为“舆地总图”,涵盖了全国的州郡、分国和县域。曾有一幅《天下大图》的总图,由于体量巨大,用八千匹细密的绢制作而成,使用起来极为不便。裴秀在其助手京相璠的协助下,以一寸折地百里,比例尺约为1:180万,缩绘成全新的《地形方丈图》。

封建王朝的天命王权,真的是由地图决定的吗?

对于中国历史发展和演进的描绘或者勾勒,实际上可以从无数个角度进行切入,比如从人物志的角度、从生产力变革的角度、从王朝战争的角度、从都城变迁的角度、从城市发展的角度……每一个切入点,都是串起整部中国史并将其立体呈现出来的脉络线。

以地图的发展变化作为主线,并辅以人物群像来展现从尧舜时期至清朝的王朝更替,这正是《地图生死劫:天命王权》一书最具特色的地方。作者前卫以拟人化的手法,将地图与王朝的更迭变迁紧密地联系在一起,意在使本来略为枯燥的反映古代民生、贸易、军事和运输等事关国计民生事宜的地图的发展,生动活泼起来。

在进入每一个朝代时的引入章节内容,前卫通常是以一个具体的历史场景的再现来完成,该种描述,比较像是作者自己描绘的故事而非历史史实。评论家王毅在本书的书评中写道:“这种写作手法也在一定程度上冲淡了一本图书的学理性、严肃性和客观性,或者说,对于读者是否认可该书的权威性可能是会有所影响的。该书前后文风也存在着一些变化。可能是由于唐朝及以后,地图的发展与之前朝代相比,在丰富性和专业性上实现了跨越式的突破,所以作者在行文时,书中有关古代地图的资料性的表述明显增多。因此,较之前面偏讲故事的风格而言,后面在论述地图的发展之时,学术性的风格比重增大。”

作者前卫谈道,自己在该书的创作过程中,参考史籍资料上百万字,引用注解达六万余字。每一章节涉及的人物、时间、事件,都多方考证,希望足够准确。

汉西域诸国图。(本文来自澎湃新闻,更多原创资讯请下载“澎湃新闻”APP)

发表评论 发表

评论列表(1条) 事实视角 历史领域爱好者 转发了 2021-04-20 举报 回复 赞 没有更多啦

古人没有航拍和卫星,如何绘制精确地图?一个天才提出了解决方案

地图罗四渎,天文载五潢。--《咏水·标名资上善》

地图这种东西在我们的生活中扮演着非常重要的地位,在一张简简单单的图纸上描绘出一个国家甚至于整个世界山川河流的走向,那是一项多么浩大的工程。我们现在的地图是在卫星定位的基础上绘制而成的,大到一个国家的所在位置,小到一条街上的一个门牌号,它都能表现的非常清楚。但是在没有卫星定位的古代,地图又是如何绘制的呢?

古时的地图绘测要感谢一位名叫裴秀的人,他所创造的地图绘制标准在中国的历史上长期的产生着重大的影响。在古希腊著名的地理学家埃拉托色尼提出地图投影测绘方法之前中国一直采取着裴秀的绘图方法,根据他的方法所绘制的地形图,首次采用了比例尺这个概念,在他的地图中一寸约等于现实中的一百里,一直到现代我们依然在使用这项原则。

裴秀的职场生活

魏晋时期有一个叫裴秀的地理天才,他出生于官宦世家,自幼就天赋异禀,十分的聪明。各种经书及传统经典对她来说非常的容易,在非常年幼的时候,他就已经熟读熟记各种历史经典。幼时成才的他还非常的勤奋好学,成年后她跟随着曹爽将军,经过一次又一次战争的胜利,不断的加封进爵,赢得了济川侯的职位。

不仅如此,他的仕途并没有因为得到如此重要的职位而有所暂停,他后期还因为出色的表现被升为了黄门侍郎。被调到皇帝身边工作后,裴秀经常帮助皇帝处理事务,他出色的能力,经常受到皇帝的夸赞。

但他的职场生涯并不是一帆风顺的,有一次司马懿发动政变,在这场政变中他杀死了裴秀所跟随的曹爽,也因为曹爽的事是裴秀的政治生涯暂时告一段落,裴秀被革职了。但当时的魏帝好才, 经常与一些有学识的大家一起讨论学问,而裴秀就是其中之一。

裴秀还为司马炎世子之位的确立起到了巨大的贡献,在当时的司马昭心中,并没有适合的世子任选。但当时也有些传言说司马昭想要利司马攸为世子,听到这些传言的司马炎,心中有些着急,于是就找到了裴秀,想要裴秀为自己在司马昭的面前多美言几句,以便使自己能够顺利继承世子之位。

裴秀就对司马昭说道,司马炎这个人在人群中非常的有德望,非人臣之貌。就此才奠定了司马炎的世子之位,此后,司马炎也对裴秀一直抱怀着感激之情。

裴秀这一生做过很多重要的职位,但他最可贵的并不是因为这些职位为其取得了多大的成就,赢得了什么美名,无论多高的决心他为后世做贡献的决心非常的难得,照拂后世的广博心胸使其为后世留下了地图绘测六项基础原则。

制图的想法

除了政治上的成就以外,裴秀最重要的成就是在地图绘测上的巨大贡献,他提出的地图绘测理论制图六体最后是的地图绘测都有着巨大的影响。在他的理论中他比例尺方位以及距离之间的关系作了详细的解释说明。在他的理论中有6项最基本的原则:分率,准望,道里,高下,方邪,迂直。

分率是反映面积、长宽之比例,即今之比例尺;准望是确定地貌、地物彼此间的相互方位关系;道里则是用以确定两地之间道路的距离;高下即相对高程;方邪即地面坡度的起伏;迂直即实地高低起伏与图上距离的换算。他还认为这些原则之间都是相互影响、相互制约的,但这些理论并不是凭空臆想出来的。

当裴秀在政治权利上达到自己的巅峰位置之时,他认为自己应该在一些其他方面做一些成绩,为后世留下一些财富。在自己长久的学识积累中,他知道有一本名叫《禹贡》的书中曾记载了一些山川地名以及具体的行走路,但是他认为只是通过文字来进行记载有些太过于片面,并且随着时间的更迭,具体的山川路线会出现变化。

于是他以《禹贡》书为参考,实际勘测为基准,绘制了一副全新的地图《禹贡地域图》,这幅地图中的一切山脉、河流、湖泊、沼泽、平原以及高原即使经过实地勘测绘制而成。这幅地图是他地图绘测理论的集大成者,它几乎涵盖了地图学制作中的所有基本理论。这份详细精密的地图,为后期人们的出行以及军队之间的行径提供了巨大的便利。

也正是因为有了裴秀,中国的地图绘测技术在历史上就不曾落后于西方。裴秀的地图绘制理论影响了后世,后期的唐元清时代的地图绘测家是依据裴秀的制图六体的规则。现在以裴秀的名字所命名的裴秀奖,这项奖项又被称为优秀地图作品奖,是中国地图学界的最高奖项。

当代的绘图方法

伴随着几千年来的发展历史,地图的会测已经从原先最简单的方法逐步进化出了现在更加科学严谨的方法--卫星绘测。除此以外,五色定理的提出更为彩色的图的产生奠定了重要的基础。伴随着科学技术水平的不断提高,电子计算机技术与自动化技术也引进到了地图绘测之中。这样使得地图绘测变得更加便捷容易,这也为地图赋予了一些新的内容。

在现如今这个满是科技感的时代,地图绘测最常用的三种方法分别是GPS定位方法,航空摄影测量方法以及遥感技术。其中现在最常用的GPS定位方法,这是根据现在所发射的24颗卫星来定位的。但GPS定位毕竟不是为中国人所属的,伴随着北斗卫星的诞生,中国人也拥了有属于自己的卫星定位方系统。

结语

伴随着当代社会科学技术水平的进步,我们的生活更加的便利,现在的电灯,电脑,汽车,飞机都是科技进步的产物,古时的人们无法享受这些现代科技带来的便利。对于当代人来说,尤其是当代的大多数青年人群,科学技术带来的弊端,使得他们在出行时很难辨认方向,定位导航手机地图俨然成为了他们日常生活中必不可少的一项。

古人出行大多依靠步行,虽然他们大多数的地区都是荒郊野外,但在一些较复杂的地形中,他们仍然需要地图来导航。而裴秀的地图绘测理论便利了地图的绘制,同时也便利了人们的生活。除此以外,裴秀的地图绘测理论还是世界上最为完善的理论,中国地图绘测之父的称号给他当之无愧。

参考资料:《咏水·标名资上善》张文琮

发表评论 发表