R可視乎|標準中國地圖製作

2021-02-27 莊閃閃的R語言手冊

由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:

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_sf

df2_sf_pre <- sf::st_transform(df2_sf,crs="+proj=laea +lat_0=40 +lon_0=104")
df2_sf_pre

即可獲取對應值,進而進行範圍設置。

總結

該期推文也是基於自己對地圖的喜歡進行繪製,後面還是會以基礎圖表的繪製為主,希望大家能夠喜歡,多多支持。更多想法可以在 讀者討論 區進行留言告知。

相關焦點

  • R-ggplot2 標準中國地圖製作
    由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):
  • 2020年標準地圖發布,如何下載高清中國地圖和各省市高清地圖
    2020版高清中國地圖每年的8月29日,是第全國測繪法宣傳日。自然資源部在2020年發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖地圖。中國全圖的標準地圖有JPG、EPS兩種數據格式,地圖幅面分為64開、32開、16開、8開、4開等。如果要列印,建議下載jpg格式的;需要編輯EPS格式地圖時,建議使用Adobe Illustrator軟體。對地圖內容編輯(包括放大、縮小和裁切)改動的,公開使用前需要送自然資源主管部門審核。
  • 地圖上的中國:帶你看看中國古代地圖製作的歷史
    雖然《禹貢地域圖》已經遺失,但它是目前中國文獻記載最早的歷史地圖集,其中最珍貴的是序中的裴秀在序言中(序言被保留在《晉書·裴秀傳》與《藝文類聚》中)提出了繪製地圖的六項基本原則,這就是中國古地圖史上著名的「製圖六體」。
  • 中國古代地圖出現在何時?當時是如何製作的,地圖用在哪兒?
    中國古代地圖出現在何時?當時是如何製作的,地圖用在哪兒? 我們生活在現在的人們對於地圖是相當熟悉,工作和生活中越來越離不開地圖,去一個單位或地方,駕車旅遊等等都用上了電子地圖了。但是你們知道在古代是什麼時候開始出現地圖的嗎?我們的先民在那個時候是怎麼樣製作地圖和實用地圖的呢?
  • 2019版中國標準地圖上線:有啥特點?在哪下載?
    今年的活動主題為「規範使用地圖 一點都不能錯」。2019版標準地圖也在今日上線。核查世界500強企業官網等對問題地圖敦促整改目前「問題地圖」主要有兩類:一是危害國家主權和領土完整的問題地圖,例如臺灣省在地圖上的表示違背「一個中國」原則;錯繪、漏繪我國臺灣島、
  • 2020年標準地圖來了
    自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。據相關負責人介紹,與往年相比,今年發布的地圖主要有以下三方面特點:一是地圖服務國家重大戰略能力進一步提升。二是地圖內容更加豐富。此次發布的地圖,尺寸上主要以四開幅面為主,同時發布了少量1釐米和3釐米的極小尺寸地圖,充分考慮了印刷製作等特殊場景的地圖使用需求。
  • 2020年標準地圖來了!
    自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。(點擊查看)截至目前,該系統共提供了324幅公益性地圖供公眾下載使用,提供了4幅自助製圖底圖供公眾在線製圖。據相關負責人介紹,與往年相比,今年發布的地圖主要有以下三方面特點:一是地圖服務國家重大戰略能力進一步提升。
  • 如何避免「問題地圖」?自然資源部免費向公眾提供標準地圖服務
    據悉,自然資源部目前已免費向公眾提供標準地圖服務。地圖的「正確打開方式」成為開學第一課什麼才是標準的地圖?怎樣獲取正確的地圖?手繪地圖時要注意哪些方面?課上,陶嵐從身邊的地圖出發,用生動易懂的語言,對地球到地圖、版圖、地圖上的中國、地圖上的廣東和廣州、怎樣獲取正確的地圖以及兒童手繪地圖等方面進行講解,教導同學們正確使用地圖,形成正確的國家版圖意識。
  • 新版標準地圖上線,呵護國家版圖,中國地圖一點都不能錯!
    自然資源部成立以來,面向「問題地圖」多發頻發領域,聯合有關部門強化對地圖的監管和日常巡查力度,對世界500強企業官方網站,大型會議和展覽使用的地圖,以及新聞報導、網際網路站、報刊圖書、影視劇等存在的「問題地圖」進行核查,對數十家企業和網站存在的「問題地圖」督促整改,取得顯著成效。關於2019版標準地圖1、新版標準地圖亮點?
  • 地圖上的中國:古人製圖不輸今人,帶你看看中國古地圖的製作史
    」文獻有明確記載,裴秀曾製作了《禹貢地域圖》,經過上奏而「藏於秘府」,而這種地圖只有文臣或者帝王貴族們才有機會閱覽。但隨著時代的變遷,這部《禹貢地域圖》也已經不復存在了。 》中)提出了繪製地圖的六項基本原則,這就是中國古地圖史上著名的「製圖六體」。
  • 最新版標準中國地圖發布 附查詢入口
    更新時間:2020年9月7日  最新版標準中國地圖發布 附查詢入口  內容:8月29日自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。  溫馨提示:  使用我國版圖,應遵循我國相關法律法規的規定,從相關政府網站免費下載標準地圖。
  • 最新版標準中國地圖來了
    自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。一起規範使用地圖!中國地圖 1:4800萬世界地圖 1:2.5億分省(區、市)地圖
  • 2020年標準地圖發布 高清標準地圖官網下載連結地址
    2020年標準地圖發布 高清標準地圖官網下載連結地址 【2020年標準地圖發布】據央視新聞 8 月 29 日消息,今天是全國測繪法宣傳日。
  • 《艾蘭島》怎麼製作地圖 地圖製作方法指南
    不了解艾蘭島地圖如何製作的玩家,九遊小編為你準備了最新的攻略,感興趣的玩家趕快一起來看看吧! 艾蘭島地圖製作攻略 每個島嶼都有一處「固定復活點」,而這個「復活點」通常會在「海邊... 艾蘭島地圖如何製作?
  • 打造GPS時尚娛樂旗艦 奧可視T510L評測
    售後服務:奧可視在200多個城市啟動了「金牌售後」服務點建設行動,為所有用戶開放「機器固件升級,地圖升級,機器維修」等售後服務。小編了解到近期,AOCOS奧可視與北京四維圖新科技股份有限公司、北京圖為先科技有限公司合作,在其全系新品奧可視(AOCOS)多媒體導航儀中,甄選了四維圖新的導航地圖數據和圖為先的導航引擎,而小編手上這部奧可視T510L就採用了最新的四維圖新正版地圖。
  • 最標準的中國地圖出爐啦!趕緊收藏起來!
    自然資源部發布2020年最標準中國地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。每一線每一界都是我們寸步不讓的領土,代表我們的美麗山河!!中國地圖世界地圖中國分省地圖
  • 北京大學袁曉如:智能數據可視分析
    長期致力於可視化與可視分析通用基礎方法與領域應用系統的研究,在基於地圖隱喻的社交媒體數據可視分析、任務驅動的可視化數據管理、交互式複雜數據分析、可視化的快速構建與自動化等方向做了創新的開拓工作,相關可視化研究工作成果廣泛用於流場分析、交通、社會媒體等領域。高動態範圍可視化的工作獲2005年IEEE VIS大會最佳應用論文獎,近年來指導團隊十餘項次在IEEE VAST可視分析挑戰賽中獲獎。
  • 山東新版標準地圖與「天地圖·山東」有何區別?
    齊魯晚報·齊魯壹點記者李殷婷12月1日,山東省自然資源廳召開新聞發布會,介紹我省2020版標準地圖今天正式上線運行的有關內容並回答記者提問。齊魯晚報·齊魯壹點記者從會上了解到,目前我省有「天地圖·山東」,而標準地圖與「天地圖·山東」提供的公共地圖服務的區別在於,標準地圖是依據山東省最新基礎測繪地理信息數據和行政區域界線勘界成果等資料編制的適合大眾公開使用的系列標準化地圖產品,為社會公眾提供不同尺度、不同開本的地圖服務載體,為用戶製作個性化地圖提供標準地理底圖服務,其目的是滿足各級政府、企事業單位和社會公眾日益增長的地圖需求,引導公眾正確使用標準地圖
  • 2020年標準中國地圖發布
    自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。 8月29日是全國測繪法宣傳日。自然資源部發布2020年標準地圖,標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖。一線一界,都是國家行使主權的疆域;一點一段,都代表著祖國的壯美河山!
  • 蘇州標準地圖!
    蘇州標準地圖!攝影:^你和喵日前自然資源部發布了2020年標準地圖標準地圖服務系統新上線55幅公益性地圖和1幅自助製圖底圖還發布了長江三角洲地區區域圖小魚也收集匯總了蘇州市標準地圖一起來看一看吧中國地圖首先當然要要看中國地圖啦一線一界,都是國家行使主權的疆域一點一段,都代表著祖國的壯美河山(點擊查看大圖)