R語言ggplot2包繪制網絡地圖

重要提示:數據和代碼獲取:請查看主頁個人信息!!!

載入R包

rm(list=ls())
pacman::p_load(tidyverse,assertthat,igraph,purrr,ggraph,ggmap)

網絡節點和邊數據

nodes <- read.csv('nodes.csv', row.names = 1)
edges <- read.csv('edges.csv', row.names = 1)

節點數據權重計算

g <- graph_from_data_frame(edges, directed = FALSE, vertices = nodes)
nodes_for_plot <- nodes %>% mutate(weight = degree(g))

網絡邊和地圖經緯度數據整理

edges_for_plot <- edges %>%inner_join(nodes %>% select(id, lon, lat), by = c('from' = 'id')) %>%rename(x = lon, y = lat) %>%inner_join(nodes %>% select(id, lon, lat), by = c('to' = 'id')) %>%rename(xend = lon, yend = lat) %>% mutate(category = as.factor(category))

edges_for_plot <- edges %>%

  • 這行代碼開始了一個管道操作,將 edges 數據框作為輸入。edges 數據框應該包含圖中的邊的信息,例如每條邊的起點和終點。

inner_join(nodes %>% select(id, lon, lat), by = c('from' = 'id'))

  • nodes %>% select(id, lon, lat) 首先從 nodes 數據框中選擇 id(節點標識符)、lon(經度)、lat(緯度)這三列。

  • inner_join 函數將 edges 數據框與上述選擇的節點數據進行內連接。連接的依據是 edges 中的 from 列與 nodes 中的 id 列相匹配,這樣每條邊的起點都會被賦予對應節點的經緯度信息。

rename(x = lon, y = lat)

  • 這行代碼將連接后得到的 lonlat 列重命名為 xy,這通常是為了繪圖方便或符合后續處理的習慣。

inner_join(nodes %>% select(id, lon, lat), by = c('to' = 'id'))

  • 類似于前面的操作,這次是將修改過的 edges 數據框再次與節點的經緯度信息進行內連接,但這次連接依據是 edges 中的 to 列與 nodes 中的 id 列。

  • 這樣每條邊的終點也被賦予對應節點的經緯度信息。

rename(xend = lon, yend = lat)

  • 將第二次連接后得到的 lonlat 列重命名為 xendyend,為繪制起點到終點的直線做準備。

mutate(category = as.factor(category))

  • 這行代碼使用 mutate 函數將 category 列轉換為因子(factor)類型。因子類型在 R 中用于表示分類變量,這可能是為了在繪圖或分析時處理邊的類別。

ggplot2出圖

ggplot(nodes_for_plot) + geom_polygon(aes(x = long, y = lat, group = group),data = map_data('world'),fill = "#CECECE", color = "#515151",size = 0.15) +geom_curve(data = edges_for_plot, aes(x = x, y = y, xend = xend, yend = yend, # draw edges as arcscolor = category, size = weight),curvature = 0.33,alpha = 0.5) +scale_size_continuous(guide = FALSE, range = c(0.25, 2)) + # scale for edge widthsgeom_point(aes(x = lon, y = lat, size = weight), ? ? ? ? ? # draw nodesshape = 21, fill = 'white',color = 'black', stroke = 0.5) +scale_size_continuous(guide = FALSE, range = c(1, 6)) + ?  # scale for node sizegeom_text(aes(x = lon, y = lat, label = name), ? ? ? ? ? ? # draw text labelshjust = 0, nudge_x = 1, nudge_y = 4,size = 3, color = "white", fontface = "bold") +coord_fixed() 

?

基礎圖層

  • ggplot(nodes_for_plot): 初始化一個ggplot對象,可能包含一些特定點的節點數據。

  • geom_polygon(...): 添加一個多邊形層,這里是使用了世界地圖的數據。aes(x = long, y = lat, group = group)設置了多邊形的坐標和分組。填充顏色設為灰色#CECECE,邊界顏色設為深灰#515151,邊界寬度為0.15。

曲線層

  • geom_curve(...): 添加曲線層,用于繪制邊緣或連接線,具體數據來自edges_for_plot。這里曲線的顏色和寬度通過aes(...)映射到categoryweight字段。曲線的彎曲度為0.33,透明度為0.5。

邊緣寬度的比例尺

  • scale_size_continuous(guide = FALSE, range = c(0.25, 2)): 設置曲線寬度的連續比例尺,范圍從0.25到2,不顯示圖例。

點層

  • geom_point(...): 添加點層,用于繪制節點。節點位置通過aes(x = lon, y = lat)設置,大小通過weight控制。點的形狀設為21(帶邊框的圓形),填充顏色為白色,邊框顏色為黑色,邊框寬度為0.5。

節點大小的比例尺

  • scale_size_continuous(guide = FALSE, range = c(1, 6)): 設置節點大小的連續比例尺,范圍從1到6,不顯示圖例。

文本層

  • geom_text(...): 添加文本層,用于繪制節點旁的文本標簽。文本位置通過微調nudge_xnudge_y設置,水平對齊hjust = 0(左對齊)。文本大小為3,顏色為白色,字體加粗。

坐標系

  • coord_fixed(): 設置一個固定比例的坐標系,確保緯度和經度的比例一致,通常用于地圖數據以保持比例正確。

這段代碼的整體作用是在世界地圖上繪制節點和節點間的連接線,并且附加文本標簽,適用于展示網絡、路徑或者其他地理相關的數據。

映射顏色

ggplot(nodes_for_plot) + geom_polygon(aes(x = long, y = lat, group = group, fill = region), show.legend = F,data = map_data('world'),color = "black",size = 0.15) +geom_curve(data = edges_for_plot, aes(x = x, y = y, xend = xend, yend = yend, # draw edges as arcssize = weight),color = 'black', curvature = 0.33,alpha = 0.5) +scale_size_continuous(guide = FALSE, range = c(0.25, 2)) + # scale for edge widthsgeom_point(aes(x = lon, y = lat, size = weight), ? ? ? ? ? # draw nodesshape = 21, fill = 'white',color = 'black', stroke = 0.5) +scale_size_continuous(guide = FALSE, range = c(1, 6)) + ?  # scale for node sizegeom_text(aes(x = lon, y = lat, label = name), ? ? ? ? ? ? # draw text labelshjust = 0, nudge_x = 1, nudge_y = 4,size = 3, color = "white", fontface = "bold") +coord_fixed(xlim = c(-150, 180), ylim = c(-55, 80)) + theme(panel.grid = element_blank()) +theme(axis.text = element_blank()) +theme(axis.ticks = element_blank()) +theme(axis.title = element_blank()) +theme(legend.position = "right") +theme(panel.grid = element_blank()) +theme(panel.background = element_rect(fill = "#596673")) +theme(plot.margin = unit(c(0, 0, 0.5, 0), 'cm'))

這段代碼相較于前一段代碼有以下幾個主要修改和增加:

  1. 多邊形層 (geom_polygon):

    • 增加了fill = region屬性到aes函數中,這表示多邊形的填充顏色現在是基于region字段動態變化的,而不是固定的灰色。

    • 修改了邊框顏色為黑色。

    • 增加了show.legend = F,這表示不顯示圖例,之前的代碼中默認可能顯示圖例。

  2. 曲線層 (geom_curve):

    • 去除了曲線的顏色通過aes動態映射,而是設置成了統一的黑色。

    • 去除了曲線寬度的動態映射,只保留了基于weight的大小映射。

  3. 坐標系 (coord_fixed):

    • 增加了xlimylim參數,這用于設置X軸和Y軸的顯示范圍,可以用于聚焦到地圖的特定部分。

  4. 主題設置 (theme):

    • 新增多個

      theme

      函數調用,用于定制圖表的美觀性和可讀性:

      • panel.grid = element_blank():去除背景的網格線。

      • axis.text = element_blank()和其他相關axis設置:去除坐標軸的文本、刻度、標題等元素,使圖表更為簡潔。

      • legend.position = "right":設置圖例位置在右側。

      • panel.background = element_rect(fill = "#596673"):設置面板背景顏色為深灰藍色。

      • plot.margin = unit(c(0, 0, 0.5, 0), 'cm'):調整圖表的邊緣空白。

數據和代碼獲取:請查看主頁個人信息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20821.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20821.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20821.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python技術】AI編程新手快速入門學習LangChain大模型框架

如果我們要搞AI智能體&#xff0c;普通人一般 借助騰訊元器、 coze、KIMI 或者其他大平臺搞一搞&#xff0c;比如我配置的coze智能體在微信公眾號聊天。 對于程序員來說&#xff0c;一言不合就喜歡搞代碼。 前面文章也介紹了不少關于AI知識庫問答&#xff0c;AIagent 不少開源…

利用AI技術革新學習筆記整理:邁向高效學習的新時代

利用AI技術革新學習筆記整理&#xff1a;邁向高效學習的新時代 在數字化時代&#xff0c;學習方式正在經歷一場革命。人工智能&#xff08;AI&#xff09;技術的融入&#xff0c;讓學習筆記的整理變得更加高效、智能。本文將探討如何利用AI整理學習筆記&#xff0c;以及這一技…

指紋采集技術

目錄 1.概述 1.1 捺印油墨采集 1.2 現場指紋提取 1.3 在線指紋采集 2. 指紋采集器的關鍵技術指標 2.1 采集面積 2.2 分辨率 2.3 圖像質量 2.4 耐用性 1.概述 最早的指紋采集技術是油墨法&#xff0c;至少已經有上百年的歷史。1990年代出現了活體指紋采集器&#xff0c…

數據庫(入門)

文章目錄 一、數據庫(DB) 二、數據庫管理系統&#xff08;DBMS&#xff09; 三、SQL&#xff08;結構化查詢語言&#xff09; 四、三者的關系 五、端口號&#xff08;port number&#xff09; 一、數據庫(DB) 定義&#xff1a;按照一定格式存儲數據的一些文件的組合。 簡單來…

常用的變量命名

當命名編碼中的變量時&#xff0c;清晰、簡潔和具有描述性的命名是非常重要的。以下是一些常用的變量名稱示例&#xff1a; 整數型變量&#xff1a; countindexnumtotalsizelength 浮點型變量&#xff1a; priceratetemperatureweightheightamount 字符串型變量&#xff1a; …

大數據測試/ETL開發,如何造測試數據

相信很多的小伙伴&#xff0c;有些是大數據測試崗位&#xff0c;有些是ETL開發&#xff0c;都面臨著如何要造數據的情況。 1&#xff0c;造數背景 【大數據測試崗位】&#xff0c;比較出名的就是寧波銀行&#xff0c;如果你在寧波銀行做大數據開發&#xff0c;對著需求開發完…

數學建模 —— 層次分析法(2)

目錄 一、層次分析法&#xff08;AHP&#xff09; 二、構造比較判斷矩陣 2.1 兩兩比較法 三、單準則下的排序及一致檢驗 3.1 單準則下的排序 3.2 一致性檢驗 四、層次總排序 4.1 層次總排序的步驟 4.2 總排序一致性檢驗 一、層次分析法&#xff08;AHP&#xff09; 方…

xdp、dpdk、rdma能在同一網卡上同時使用嗎?

文心一言 XDP、DPDK和RDMA是三種不同的技術&#xff0c;它們各自在Linux網絡性能優化中扮演了不同的角色。關于它們能否在同一網卡上同時使用&#xff0c;我們需要考慮以下幾個方面&#xff1a; XDP&#xff08;eXpress Data Path&#xff09;&#xff1a; XDP是Linux內核提供…

SVM算法-非線性分類背后技術詳解

引言 支持向量機&#xff08;SVM&#xff09;是一種強大的監督學習算法&#xff0c;廣泛應用于分類和回歸任務中。本文將詳細介紹SVM算法在非線性分類任務中的應用&#xff0c;并通過代碼示例來展示其背后的技術精髓。我們將分三大部分來展開&#xff0c;本部分將重點介紹SVM算…

銀行批量支付業務功能測試點詳細介紹

銀行批量支付業務是一種銀行業務處理方式&#xff0c;它允許銀行將多個支付交易合并為一個批次&#xff0c;然后一次性進行處理。這種方式通常用于處理大量、重復性高或定期發生的支付交易&#xff0c;如工資發放、定期賬單支付等。 主要作用&#xff1a; 提高效率&#xff1…

【C++面試50題】

以下是針對C程序員面試可能遇到的一些問題&#xff0c;涵蓋了從基礎語法、面向對象、STL、內存管理、模板、異常處理、并發編程等多個方面。 ### 基礎概念與語法 1. C與C的主要區別是什么&#xff1f; 2. 什么是構造函數和析構函數&#xff1f;它們何時被調用&#xff1f; 3. 什…

51單片機C語言編程網盤:深度探索與實用指南

51單片機C語言編程網盤&#xff1a;深度探索與實用指南 在嵌入式系統領域&#xff0c;51單片機以其廣泛的應用和穩定的性能而備受青睞。而C語言&#xff0c;作為一種高效且靈活的編程語言&#xff0c;更是單片機編程的首選工具。今天&#xff0c;我們將通過分享一個51單片機C語…

17、Spring系列-SpringMVC-請求源碼流程

前言 Spring官網的MVC模塊介紹&#xff1a; Spring Web MVC是基于Servlet API構建的原始Web框架&#xff0c;從一開始就已包含在Spring框架中。正式名稱“ Spring Web MVC”來自其源模塊的名稱&#xff08;spring-webmvc&#xff09;&#xff0c;但它通常被稱為“ Spring MVC…

Linux 軟件安裝:從源碼編譯到包管理器安裝

Linux 軟件安裝&#xff1a;從源碼編譯到包管理器安裝 在 Linux 操作系統中&#xff0c;軟件安裝是一個非常重要的任務。不同的軟件安裝方式有不同的優缺點&#xff0c;本篇博客將介紹 Linux 軟件安裝的幾種方式&#xff0c;包括從源碼編譯安裝、使用包管理器安裝和使用第三方…

【Redis】什么是緩存雪崩 ? 怎么解決

緩存雪崩&#xff08;Cache Avalanche&#xff09;是指在某個時刻&#xff0c;大量的緩存同時失效或過期&#xff0c;導致大量的請求直接打到數據庫&#xff0c;使數據庫壓力劇增&#xff0c;甚至崩潰。與緩存穿透和緩存擊穿不同&#xff0c;緩存雪崩是多個緩存同時失效或過期引…

[AI Google] 三種新方法利用 Gemini 提高 Google Workspace 的生產力

Workspace 側邊欄中的 Gemini 現在將使用 Gemini 1.5 Pro&#xff0c;新的 Gemini for Workspace 功能即將登陸 Gmail 移動應用&#xff0c;等等。 Gemini for Google Workspace 幫助個人和企業更好地利用 Google 應用——從在 Gmail 中撰寫郵件到在 Sheets 中組織項目計劃。過…

glpi 安裝與使用

1、環境介紹 操作系統&#xff1a;龍蜥os 8.9 nginx&#xff1a;1.26.1 php&#xff1a;8.2.19 mysql&#xff1a;MarinaDB 10.3.9 glpi&#xff1a;10.0.6 fusioninventory&#xff1a;fusioninventory-10.0.61.1 2、安裝epel源 dnf install epel-release -y dnf install htt…

Mongodb安裝和簡單操作

文章目錄 1.安裝服務端1.1 官網下載&#xff0c;解壓安裝1.2 配置啟動 2.安裝客戶端2.1 MongoDB Shell下載安裝2.2 連接服務3.操作3.1 創建數據庫 Create a New Database and Collection3.1 Insert Documents3.2 Query Documents3.3 Update Documents3.4 Delete Documents 1.安…

Python | Leetcode Python題解之第125題驗證回文串

題目&#xff1a; 題解&#xff1a; class Solution:def isPalindrome(self, s: str) -> bool:n len(s)left, right 0, n - 1while left < right:while left < right and not s[left].isalnum():left 1while left < right and not s[right].isalnum():right - …

2010-2015 年阿拉斯加北坡苔原植物功能類型連續覆蓋圖

ABoVE: Tundra Plant Functional Type Continuous-Cover, North Slope, Alaska, 2010-2015 2010-2015 年阿拉斯加北坡苔原植物功能類型連續覆蓋圖 簡介 文件修訂日期&#xff1a;2021-08-27 數據集版本: 1 摘要 該數據集以 30 米的分辨率提供了阿拉斯加北坡約 12.5 萬平方…