赞
踩
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")
效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。