国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - R語言 - 數模技巧不用for循環且使用ggplot2實現地圖上連線

數模技巧不用for循環且使用ggplot2實現地圖上連線

2022-01-20 15:49Kanny廣小隸 R語言

這篇文章主要為大家介紹了一個數模技巧怎樣使用ggplot2不用for循環來實現地圖上連線,有需要的朋友可以借鑒參考下,希望能夠有所幫助

最近由于自己的時間關系,很久沒有發一些干貨了。這次想談談之前我們在進行數學建模時,如何將設計好的最優路徑,利用ggplot2在地圖上進行繪制與展示。

最簡單的方法是使用plot繪圖,然后再使用lines函數一條一條地將線加上去,但是一條一條加上去的過程中,需要使用for循環不說,而且繪制出來的圖相對也沒那么美膩。

下面我們講一講使用ggplot2且不使用for循環,如何快速便捷地完成這樣的操作。

 

1. 前文回顧

首先可以回顧一下,在沒有梯子的前提下,我們是如何利用ggplot2繪制一個較為好看的中國地圖:利用R繪制漂亮的中國地圖(無需通過google獲取)

下面我們基于前面繪制的中國地圖,根據計算(最小生成樹算法,之后有時間在說說這個,不過目前網上說的很詳細了,而且也有很多代碼)得到的相應連線貼到我們的圖上。

背景圖像

數模技巧不用for循環且使用ggplot2實現地圖上連線

 

2. 利用ggplot2連接多個點

我們需要選定其中幾個點,并將其進行連線。下面是我們最終想要達到的效果(之前的圖使用Mac畫的,下面這個是Windows,可能質感有些不一樣,望大家理解):

數模技巧不用for循環且使用ggplot2實現地圖上連線

為了達到這樣的效果,我們主要是需要將數據集整理成可以能夠舒適繪制的方式。利用ggplot2繪圖,整理數據集要占80%以上的工作。

1) 現有數據

我們的最終目的是連33條線,所以先將需要連的線均一組一組地羅列而出(每個city都對應著一組經緯度,相應地是地圖上的一個點)。

(前面的最終效果圖是前11組城市連線)

下面的數據我們命名為:city_pair

    city1     city2
1  北京&天津      上海
2       上海 廣州&深圳
3  廣州&深圳      重慶
4       重慶      成都
5       重慶      西安
6  北京&天津    哈爾濱
7  北京&天津      武漢
8       武漢      鄭州
9       重慶      昆明
10 北京&天津  烏魯木齊
11 北京&天津      拉薩
12      鄭州      西安
13      武漢      重慶
14 北京&天津      鄭州
15 北京&天津      西安
16      鄭州      重慶
17 北京&天津      重慶
18      武漢 廣州&深圳
19      上海      武漢
20      上海      鄭州
21 北京&天津 廣州&深圳
22      上海      重慶
23      昆明 廣州&深圳
24      武漢      成都
25      鄭州      成都
26      西安      成都
27 北京&天津      成都
28      成都      昆明
29      西安      武漢
30      成都 廣州&深圳
31      上海      成都
32    哈爾濱      重慶
33    哈爾濱 廣州&深圳

所以我們還需要對應城市經緯度及人口信息,這里的對象為mat.cities,它長這樣:(這部分的數據生成也在我們前面的博客中有提及)

     names      lat      long population
1  北京&天津 39.90420 116.40740    32.5506
2       上海 31.23039 121.47370    23.0191
3       鄭州 34.74725 113.62493     8.6265
4   烏魯木齊 43.82660  87.61684     3.1103
5     哈爾濱 45.80218 126.53582    10.6360
6       西安 34.34126 108.93982     8.4678
7       武漢 30.59276 114.30524     9.7854
8       成都 30.57022 104.06477    14.0476
9       拉薩 29.64411  91.11445     0.5594
10      重慶 29.56470 106.55071    28.8462
11      昆明 24.87966 102.83321     6.4320
12 廣州&深圳 23.02067 113.75178    23.0587

有了這樣兩份原始數據,我們就可以開始進行繪圖了。

首先是需要將數據整理成能夠進行繪圖的,為了方便操作,我們直接對原本的33組城市對進行操作。下面是數據預處理的過程。(由于當時數模時間有限,而數據量也不是很大,所以下面采用了大量的for循環,希望大家在用R時還是盡可能多用向量化操作,少用for循環)

2) 數據預處理

預處理代碼如下:

dat_plot = matrix(nrow = 66, ncol = 4)
k = 0
for (i in 1:33) {
for (j in 1:2) {
  k = k + 1
  my.row = mat.cities[city_pair[i, j] == mat.cities$names, ]
  dat_plot[k, 1] = unlist(my.row[1])
  dat_plot[k, 2] = unlist(my.row[2])
  dat_plot[k, 3] = unlist(my.row[3])
  dat_plot[k, 4] = i
}
}
colnames(dat_plot) = c('地區', 'lat', 'long', 'group')
dat_plot = as.data.frame(dat_plot)
dat_plot$lat = as.numeric(as.character(dat_plot$lat))   
dat_plot$long = as.numeric(as.character(dat_plot$long))

這里我們的主要思路是:將配對的一組城市變為拆分成兩組,然后再在最后添加一個group變量,主要是用于連線(兩個城市如果在一個相同的group中,使用ggplot繪圖中的參數group即可將兩個點連接起來)。

在生成完想要的數據集后,記得將經緯度調整為數值型,group直接為factor即可。

最后我們得到的數據dat_plot長下面這樣:

      地區      lat      long group
1  北京&天津 39.90420 116.40740     1
2       上海 31.23039 121.47370     1
3       上海 31.23039 121.47370     2
4  廣州&深圳 23.02067 113.75178     2
5  廣州&深圳 23.02067 113.75178     3
6       重慶 29.56470 106.55071     3
7       重慶 29.56470 106.55071     4
8       成都 30.57022 104.06477     4
9       重慶 29.56470 106.55071     5
10      西安 34.34126 108.93982     5
11 北京&天津 39.90420 116.40740     6
12    哈爾濱 45.80218 126.53582     6
13 北京&天津 39.90420 116.40740     7
14      武漢 30.59276 114.30524     7
15      武漢 30.59276 114.30524     8
16      鄭州 34.74725 113.62493     8
17      重慶 29.56470 106.55071     9
18      昆明 24.87966 102.83321     9
19 北京&天津 39.90420 116.40740    10
20  烏魯木齊 43.82660  87.61684    10
21 北京&天津 39.90420 116.40740    11
22      拉薩 29.64411  91.11445    11
23      鄭州 34.74725 113.62493    12
24      西安 34.34126 108.93982    12
25      武漢 30.59276 114.30524    13
26      重慶 29.56470 106.55071    13
27 北京&天津 39.90420 116.40740    14
28      鄭州 34.74725 113.62493    14
29 北京&天津 39.90420 116.40740    15
30      西安 34.34126 108.93982    15
31      鄭州 34.74725 113.62493    16
32      重慶 29.56470 106.55071    16
33 北京&天津 39.90420 116.40740    17
34      重慶 29.56470 106.55071    17
35      武漢 30.59276 114.30524    18
36 廣州&深圳 23.02067 113.75178    18
37      上海 31.23039 121.47370    19
38      武漢 30.59276 114.30524    19
39      上海 31.23039 121.47370    20
40      鄭州 34.74725 113.62493    20
41 北京&天津 39.90420 116.40740    21
42 廣州&深圳 23.02067 113.75178    21
43      上海 31.23039 121.47370    22
44      重慶 29.56470 106.55071    22
45      昆明 24.87966 102.83321    23
46 廣州&深圳 23.02067 113.75178    23
47      武漢 30.59276 114.30524    24
48      成都 30.57022 104.06477    24
49      鄭州 34.74725 113.62493    25
50      成都 30.57022 104.06477    25
51      西安 34.34126 108.93982    26
52      成都 30.57022 104.06477    26
53 北京&天津 39.90420 116.40740    27
54      成都 30.57022 104.06477    27
55      成都 30.57022 104.06477    28
56      昆明 24.87966 102.83321    28
57      西安 34.34126 108.93982    29
58      武漢 30.59276 114.30524    29
59      成都 30.57022 104.06477    30
60 廣州&深圳 23.02067 113.75178    30
61      上海 31.23039 121.47370    31
62      成都 30.57022 104.06477    31
63    哈爾濱 45.80218 126.53582    32
64      重慶 29.56470 106.55071    32
65    哈爾濱 45.80218 126.53582    33
66 廣州&深圳 23.02067 113.75178    33

3) 繪圖

下面我們的核心繪圖代碼如下,想要連接不同的線,我們只是變了數據中選取的行,如:dat_plot[1:22, ]。

## 11線
ggplot() + 
geom_path(data = china, aes(long, lat, group = group), color = '#FD9FA4', show.legend = F) +
geom_point(data = mat.cities, aes(x = long, y = lat, size = population), alpha = 0.8, color = '#8BB6D6') +
geom_line(data = dat_plot[1:22, ], aes(long, lat, group = group), size = 1, alpha = 0.8, color = '#8BB6D6') +
geom_text_repel(data = mat.cities, aes(x = long, y = lat, label = names), family = "STHeiti") +
labs(x = '經度', y = '緯度',      text = element_text(family = "STHeiti"),
      plot.title = element_text(hjust = 0.5))

## 16線
ggplot() + 
geom_path(data = china, aes(long, lat, group = group), color = '#FD9FA4', show.legend = F) +
geom_point(data = mat.cities, aes(x = long, y = lat, size = population), alpha = 0.8, color = '#8BB6D6') +
geom_line(data = dat_plot[1:32, ], aes(long, lat, group = group), size = 1, alpha = 0.8, color = '#8BB6D6') +
geom_text_repel(data = mat.cities, aes(x = long, y = lat, label = names), family = "STHeiti") +
labs(x = '經度', y = '緯度',      text = element_text(family = "STHeiti"),
      plot.title = element_text(hjust = 0.5))

## 33線
ggplot() + 
geom_path(data = china, aes(long, lat, group = group), color = '#FD9FA4', show.legend = F) +
geom_point(data = mat.cities, aes(x = long, y = lat, size = population), alpha = 0.8, color = '#8BB6D6') +
geom_line(data = dat_plot[1:66, ], aes(long, lat, group = group), size = 1, alpha = 0.8, color = '#8BB6D6') +
geom_text_repel(data = mat.cities, aes(x = long, y = lat, label = names), family = "STHeiti") +
labs(x = '經度', y = '緯度',      text = element_text(family = "STHeiti"),
      plot.title = element_text(hjust = 0.5))

繪圖過程沒有什么好說的了,里面使用的函數與方法都在前面的博客中提及過:

R語言學習ggplot2繪制統計圖形包全面詳解

唯一添加的連線所使用的函數:geom_line,里面只需注意多了一個參數group,記得添加即可。

4) 結果展示

最后的16條連線與33條連線的效果圖分別如下所示:

16條連線:

數模技巧不用for循環且使用ggplot2實現地圖上連線

33條連線:

數模技巧不用for循環且使用ggplot2實現地圖上連線

以上就是數模技巧ggplot2不用for循環實現地圖上連線的詳細內容,更多關于ggplot2在地圖上連線數模技巧的資料請關注服務器之家其它相關文章!

原文鏈接:https://kanny.blog.csdn.net/article/details/84645127

延伸 · 閱讀

精彩推薦
  • R語言R語言中qplot()函數的用法說明

    R語言中qplot()函數的用法說明

    這篇文章主要介紹了R語言中qplot()函數的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    Jack_丁明12752022-01-05
  • R語言R語言實現支持向量機SVM應用案例

    R語言實現支持向量機SVM應用案例

    本文主要介紹了R語言實現支持向量機SVM應用案例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    一天_pika5222022-01-18
  • R語言R語言gsub替換字符工具的具體使用

    R語言gsub替換字符工具的具體使用

    這篇文章主要介紹了R語言gsub替換字符工具的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    lztttao10372021-12-24
  • R語言R語言常量知識點總結

    R語言常量知識點總結

    在本篇文章里小編給大家整理了一篇關于R語言常量知識點總結內容,有興趣的朋友們可以學習分享下。...

    R語言教程網12102021-12-29
  • R語言R語言中的vector(向量),array(數組)使用總結

    R語言中的vector(向量),array(數組)使用總結

    這篇文章主要介紹了R語言中的vector(向量),array(數組)使用總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要...

    A葉子葉來5772021-11-14
  • R語言R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪...

    Kanny廣小隸11982022-01-20
  • R語言基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案

    這篇文章主要介紹了基于R/RStudio中安裝包“無法與服務器建立連接”的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    truffle52815052022-01-05
  • R語言如何用R語言繪制散點圖

    如何用R語言繪制散點圖

    這篇文章主要介紹了如何用R語言繪制散點圖,幫助大家更好的理解和學習使用R語言,感興趣的朋友可以了解下...

    菜鳥教程13002021-12-23
主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 精久久| 中文字幕在线观看视频地址二 | 国产精品a久久 | 成人黄网视频在线观看 | 日韩精品一 | 91久久精品日日躁夜夜躁国产 | 黄色网毛片 | 国产精品一区二区三区免费 | 国产日韩欧美视频 | 欧美一区二区 | 91麻豆精品国产91久久久更新资源速度超快 | 亚洲国产美女视频 | 国产区在线 | 韩日一区二区三区 | 精品久久国产字幕高潮 | 国产一区 欧美 | 亚洲第一色| 成人精品在线视频 | 夜夜操网 | 国产精品亚洲第一区在线暖暖韩国 | 国产一区二区影院 | 久久99精品国产.久久久久 | 欧美一级片在线 | 久久国产综合 | caoporn免费 | 国产真实乱全部视频 | 激情综合婷婷 | www.国产一区 | 日本一区二区三区四区 | 一区二区三区四区在线 | 不卡免费在线视频 | 成人a级片在线观看 | 91在线亚洲| 亚色在线 | 欧美在线一区二区三区 | 国产在线精品一区 | 九九热精品视频在线观看 | 久久h | 亚洲高清视频在线 | 成人免费一区二区三区视频网站 |