R语言绘制三变量分区地图

参考资料:
https://mp.weixin.qq.com/s/5c7gpO2mJ2BqJevePJz3CQ

tricolore包教程:https://github.com/jschoeley/tricolore

学习笔记:Ternary choropleth maps

1、测试实例

代码:

bash 复制代码
library(ggplot2)
library(rnaturalearthdata)
library("tricolore")#用于绘制三元地图
library("ggtern")#设置图例

#test
# 生成模拟数据
P <- as.data.frame(prop.table(matrix(runif(3^6), ncol = 3), 1))
# 使用Tricolore生成需要的数据:该步骤最为重要
colors_and_legend <- Tricolore(P, 'V1', 'V2', 'V3')
# 展示生成的数据(部分)
head(colors_and_legend$rgb)
# colors_and_legend$key#显示作为图例的三元相图
#地图绘制
# color-code the data set and generate a color-key
#用Tricolore()函数,对euro_example数据集中的每个教育组成进行颜色编码,
#并将生成的十六进制srgb颜色向量作为新变量添加到数据帧中,颜色键单独存放
tric_educ <- Tricolore(euro_example,
                       p1 = 'ed_0to2', p2 = 'ed_3to4', p3 = 'ed_5to8')

#将生成的颜色向量存放到数据集中
# add the vector of colors to the `euro_example` data
euro_example$educ_rgb <- tric_educ$rgb
#绘制地图
plot_educ <-
  # using data sf data `euro_example`...
  ggplot(euro_example) +
  # ...draw a choropleth map
  geom_sf(aes(fill = educ_rgb, geometry = geometry), size = 0.1) +
  # ...and color each region according to the color-code
  # in the variable `educ_rgb`
  scale_fill_identity()

#设置图例
plot_educ +
  annotation_custom(
    ggplotGrob(tric_educ$key +
                 labs(L = '0-2', T = '3-4', R = '5-8')),#tric_educ$key
    xmin = 55e5, xmax = 75e5, ymin = 8e5, ymax = 80e5
  )

代码来源:https://github.com/jschoeley/tricolore

结果:

2、R语言绘图学习

(1)绘图布局设置

方法一、layout()函数:

layout(mat, widths = rep.int(1, ncol(mat)),

heights = rep.int(1, nrow(mat)), respect = FALSE)

使用方法:

bash 复制代码
l <- layout(matrix(c(1, 2,  # First, second
                     3, 3), # and third plot
            nrow = 2,
            ncol = 2,
            byrow = TRUE))
layout.show(l)

结果:

还可以设置不同行之间的比例:(如第三行是第一行的3倍)

bash 复制代码
mat <- matrix(c(1, 1,  # First
                2, 3), # second and third plot
              nrow = 2, ncol = 2,
              byrow = TRUE)
layout(mat = mat,
       heights = c(1, 3)) # First and second row
                          # relative heights

方法二、par() 函数:

使用方法:

bash 复制代码
# Data
set.seed(6)
x <- rexp(50)

# Two rows, two columns
par(mfcol = c(2, 2))

# Plots
hist(x, main = "Top left")                   # Top left
boxplot(x, main = "Bottom left")             # Bottom left
plot(x, main = "Top right")                  # Top right
pie(table(round(x)), main = "Bottom right")  # Bottom right

# Back to the original graphics device
par(mfcol = c(1, 1))

图片来源:https://r-charts.com/base-r/combining-plots/

(2)加载点矢量数据,并显示在地图上

bash 复制代码
library(sf)
library(ggplot2)
library(rnaturalearthdata)

#加载点shp,并显示
points_shp <- st_read("path/points.shp")

#绘制全球海岸线
coast <- ne_coastline(scale = "small", returnclass = "sf")
xlim <- c(-175, 175)  # 经度范围
ylim <- c(-55, 80)    # 纬度范围

ggplot(data = coast) +
  geom_sf() +
  coord_sf(xlim = xlim, ylim = ylim) +
  theme_classic()+
  geom_sf(data = points_shp, color = "red", size = 2)

(3)根据某变量大小显示点的大小

可以直接设置size=points_shp$v1,但一一般情况下,需要自己根据值来定义具体大小:

安装包:install.packages("dplyr")

bash 复制代码
points_shp <- points_shp %>% 
  mutate(size = case_when(
    v1 > 0.8 ~ 9,
    v1 > 0.6 & v1 <= 0.8 ~ 4,
    TRUE ~ 1  # 默认情况下设置为1
  ))

调用:geom_sf(data = points_shp, aes(size = size), color = "red")绘制不同大小的点。

aes是"aesthetic"的缩写,用于ggplot2包中的函数,用来映射数据到图形属性,例如颜色、形状、大小等。

(4)点显示为圆环

bash 复制代码
geom_sf(data = points_shp, aes(size = size), shape = 21, fill = "transparent", color = "red", stroke = 2)

其中,shape = 21表示将点的形状设置为圆环,fill = "transparent"表示圆环内部透明填充,color = "red"表示圆环的颜色为红色,stroke = 2表示圆环的线宽为2。

相关推荐
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
ZSYP-S2 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos2 小时前
c++------------------函数
开发语言·c++
程序员_三木2 小时前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊2 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama2 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全2 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05062 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc2 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法