setwd("D:/projects/0605")
# Load packages
library(sp)
library(mapproj)
library(maptools)
library(ggplot2)
library(maptools)
library(maps)
library(sf)
library(ggspatial)
library(scales)
library(cowplot)
fun.generate_random_points <- function(center, radius, count) {
x <- center
y <- center[1]
xs <- runif(count, x, radius * x * sin(runif(1, 0, 360)))
ys <- runif(count, y, radius * y * cos(runif(1, 0, 360)))
print(xs)
print(ys)
points <- array(c(xs, ys), dim = c(2, count))
return(points)
}
fun.draw <- function(data, layers, color, fillField, stroke, size, lineWith, lineType, pointShape, alpha, scale_position, north_position, chart_color) {
# 初始化绘图
g <- ggplot()
# 柱狀圖
g_bar <- ggplot()
# 循环背景图层
for (layer in layers) {
# 读取背景图层信息
lyr_data <- st_read(layer)
g <- g + geom_sf(data = lyr_data, )
}
# 点图层
point_lyr <- st_read(data)
# 获取purchase字段列数据
purchase_list <- point_lyr$PURCHASE
# 最大值
max_value <- max(as.vector(purchase_list), na.rm = TRUE)
# 最小值
min_value <- min(purchase_list)
# 差值
diff <- max_value - min_value
# 分级数
breaks <- c()
# 各级计数
counts <- c()
i <- 0
# 计算级别,分10级
while (i < 10) {
breaks <- c(breaks, (diff / 10) * i)
counts <- c(counts, 0)
i <- i + 1
}
counts <- list(counts)
print(counts[[1]][0])
# 各级别计数
for (j in purchase_list) {
temp <- 0
for (n in breaks) {
temp <- temp + 1
if (j <= n) {
counts[[1]][temp] <- counts[[1]][temp] + 1
}
}
}
# list转向量数组
counts <- as.numeric(unlist(counts))
print(breaks)
print(counts)
# 创建柱状条数据
bar_data <- data.frame(breaks, counts)
# point_lyr <- fortify(point_lyr)
# 绘制比例尺
g <- g + annotation_scale(location = scale_position) +
# spatial-aware automagic north arrow
annotation_north_arrow(
location = north_position, which_north = "false",
style = north_arrow_fancy_orienteering
)
#设置颜色
if (is.list(color)) {
g <- g + geom_sf(
data = point_lyr, aes(fill = PURCHASE, size = size, alpha = alpha),
shape = pointShape, stroke = stroke,
size = size
) + scale_fill_gradient(low = color[1], high = color[2])
} else {
g <- g + geom_sf(
data = point_lyr, aes(size = size, fill = color, alpha = alpha),
size = size,
shape = pointShape, stroke = stroke
)
}
#绘制柱状图
g_bar <- ggplot(data = bar_data, mapping = aes(
x = breaks, y = counts,
fill = "#413a00"
)) +
geom_bar(stat = "identity")
gg <- ggdraw() +
draw_plot(g, 0, 0.5, 1, 0.5) + draw_plot(g_bar, 0, 0, 1, 0.5)
#输出图形,不打印可能无法输出图形
print(gg)
}
data <- "Data/LNHP3.shp"
layers <- c("Data/LN_bou_p1.shp", "Data/LN_bou_p2.shp")
color <- list("green", "red")
print(color[1])
# 运行函数
# north_poisition scale_position tl,tr,bl,br
fun.draw(data, layers, color, "PURCHASE", pointShape = 21, .25, size = 3, alpha = 0.75, north_position = "tl", scale_position = "bl")
效果