地形图绘制

article/2025/10/10 14:00:26
640?wx_fmt=gif 640?wx_fmt=png

作者简介

勾蒙蒙,R语言资深爱好者。

个人公众号: R语言及生态系统服务。  


前文传送门:

脏数据-数据量纲差异




在写论文或者是做学术PPT的时候,多数人都倾向于将科研图片做出不一样的效果,集“高大上”于一体,一方面能给受众以视觉冲击,另一方面漂亮的图片确实会给你的论文或者PPT增色,即使是最简单的样地地形数据图。

下图是我从一些论文上看到的关于样地地形情况或者采样点情况的介绍图,其实像实现这些图并不难,在ArcGis中当然能够实现,但有些许的复杂,本文着重对样地地形图在R语言中的实践加以详细介绍,以供大家互相交流学习!

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=pngready go 640?wx_fmt=png


##加载程序包

install.packages("sp")

library(sp)

##生成样方中心店海拔数据

XY<-expand.grid(x=seq(0,90,10),y=seq(0,90,10))

setwd("C:/Users/lx/Desktop")

Elevation<-read.csv("Elevation.csv")

Data<-cbind(XY,Elevation)

##排序

newdata<-Data[order(Data$x,-Data$y),]

##数据转化为矩阵

newdata1<-matrix(newdata$Elevation,ncol=10,nrow=10,byrow =FALSE)

一、简单的点图


par(mar=c(4,4,2,2))

coordinates(Data)<-c("x","y") ##设定坐标

plot(Data,xlab="横坐标",ylab="纵坐标")

axis(1,at=seq(0,100,10),labels=seq(0,100,10),line=0,tick=F)

axis(2,at=seq(0,100,10),labels=seq(0,100,10),line=0,tick=F)

box(lwd=2,col="red")


640?wx_fmt=jpeg

##生成点图

spplot(Data,"Elevation")

640?wx_fmt=jpeg

二、简单的面图


##矩阵图

install.packages("psych")

library(psych)

label<-seq(0,90,10)

cor.plot(newdata1,number=TRUE,show.legend=TRUE,zlim=c(70,130),labels=label,n.legend=5)#n.legend设置图例显示的级别


640?wx_fmt=jpeg

三、使用plot3D绘图


install.packages("plot3D")

library(plot3D)

##2D

par(mfrow = c(3, 3), mar = c(3, 3, 3, 2))

contour2D(newdata1, lwd = 2, colkey = FALSE)#colkey设置图例TRUE/FALSE

contour2D(newdata1, lwd = 2)#colkey默认显示图例

image2D(newdata1, clab = "m")#clab设置图例的名称

image2D(newdata1, shade = 0.4)#shade设置阴影程度

image2D(newdata1, facets = FALSE)#facets设置每个小块是否填充颜色

image2D(newdata1, contour = TRUE)#contour在图中添加等高线

image2D(newdata1, rasterImage = TRUE, contour = list(lwd = 2, col = jet.col(11)))#设置等高线颜色

image2D(newdata1, theta = 30, NAcol = "black")#theta设置图形方位;NAcol设置空值的颜色,在image2D中其默认颜色为白色,在contour2D中默认为无色

image2D(newdata1, lighting = TRUE, rasterImage = TRUE,contour = list(col = "white", labcex = 0.8, lwd = 3, alpha = 0.5))#lighting设置图形被照亮的效果;rasterImageTRUE,则会显示为栅格模式

640?wx_fmt=jpeg

##3D

par(mfrow = c(3, 3), mar = c(2, 2, 2, 2))

persp(newdata1,expand=0.25)

persp(newdata1, theta = 40, phi = 40, col = "gold", border = NA, shade = 0.5,expand=0.25)#expand调整膨胀率;border设置表面线条颜色,默认为NULL,若为NA,则表面线条的绘制命令失效,

persp3D(z = newdata1, clab = "m",expand=0.25,border = NULL)

persp3D(z = newdata1, clab = "m", shade = 0.2,expand=0.25)

persp3D(z = newdata1, facets = FALSE,expand=0.25)

persp3D(z = newdata1, facets = FALSE, curtain = TRUE,expand=0.25)

persp3D(z = newdata1, col = "white", shade = 0.5,expand=0.25)

persp3D(z = newdata1, col = ramp.col(c("white", "black")), border = "red",expand=0.25)#border设置表面线条颜色,col设置表面的填充颜色

persp3D(z = newdata1, facets = FALSE, col = "darkblue",expand=0.25)

640?wx_fmt=jpeg

##背景和坐标轴设置

par(mfrow = c(3, 3), mar = c(1, 1, 1, 1))

persp3D(z = newdata1, col = "lightblue", shade = 0.5,expand=0.25)

persp3D(z = newdata1, col = "lightblue", shade = 0.5, box = FALSE,expand=0.25)#box = FALSE边框去除

persp3D(z = newdata1, col = "lightblue", shade = 0.5, ticktype = "detailed",expand=0.25)#ticktype设置坐标轴刻度,如为sample则只用箭头表示增加的方向,如第一个小图,如为detailed则跟2D图一样绘制对应的刻度

##bty介绍:f:显示全部边框;"b":一般默认,只显示背面;"b2":背面和网格线都显示;"g":灰色背景白色的网格线;"bl":黑色的背景;"bl2"黑色的背景灰色的网格线;"n":不显示背景也不显示网格线;"u":自己可以设置背景和网格线

persp3D(z = newdata1, col = "lightblue", shade = 0.5, bty = "f",expand=0.25)

persp3D(z = newdata1, col = "lightblue", shade = 0.5, bty = "b2",expand=0.25)

persp3D(z = newdata1, col = "lightblue", shade = 0.5, bty = "g",expand=0.25)

persp3D(z = newdata1, col = "lightblue", shade = 0.5, bty = "bl",expand=0.25)

persp3D(z = newdata1, col = "lightblue", shade = 0.5, bty = "u",col.panel = "yellow", col.grid = "grey",,expand=0.25)#col.panel设置背景颜色;col.grid设置网格线颜色

persp3D(z = newdata1, col = "lightblue", shade = 0.5,ticktype = "detailed", bty = "b2",,expand=0.25)


640?wx_fmt=jpeg

##调整视图和角度

par(mfrow = c(3, 2), mar = c(1, 1, 1, 1))

x <- 1:nrow(newdata1)

y <- 1:ncol(newdata1)

persp3D(x,y, z = newdata1, col = "lightblue", scale = FALSE,shade = 1, expand =0.05)#scale决定是否归一化

persp3D(x, y , z = newdata1, col = "lightblue", scale = FALSE,shade = 0.5, expand = 0.05, d =0.8)#d值调整透视的强度,d大于1将减少透视效果,小于1增强透视效果

persp3D(x, y , z = newdata1, col = "lightblue", scale = FALSE,shade = 0.5, expand = 0.05, r =10)#r值调整观察点到图中心点距离,很显然距离越远就越接近轴测图,距离越近透视效果越强烈

persp3D(x, y , z = newdata1, col = "lightblue", scale = FALSE,shade = 0.5, expand = 0.05, theta = 10,phi=-20)#定义视角的角度theta为方位,phi为角度

persp3D(x, y , z = newdata1, col = "lightblue", scale = FALSE,shade = 0.5, expand = 0.05, ltheta = 10,lphi=90)#如果lthetalphi为特定值,则图的表面被亮光着色,即在theta方位,phi角度上打光的效果


640?wx_fmt=jpeg

##绘制彩带图及直方图

par(mfrow = c(2, 2), mar = c(2, 2, 2, 2))

ix <- seq(1, nrow(newdata1), length.out = 20)

iy <- seq(1, ncol(newdata1), length.out = 20)

ribbon3D(z = newdata1[, iy],expand=0.25)#沿着列的彩带

ribbon3D(z = newdata1[ix, ], along = "y",curtain = TRUE, space = 0.9, shade =0.3,expand=0.25)#space设置间隔,其范围为0.1-0.9;

ribbon3D(z = newdata1[ix, iy], along = "xy",expand=0.25)#xy交织的彩带

hist3D(z = newdata1[ix,iy], shade = 0.1,expand=0.8)#直方图



640?wx_fmt=jpeg

#colkey设置

par(mfrow = c(2, 2), mar = c(2, 2, 2, 2))

persp3D(z = newdata1, log = "c", clab = c("m (Elevation)"),expand=0.2)#clab设置图例的名称

persp3D(z = newdata1, clab ="m",colkey = list(side = 4, length = 1, width = 0.5, cex.axis = 2),expand=0.2)#side设置放置位置(1234对应下左上右);length设置长度,width设置宽度;cex.axis设置标签的大小

persp3D(z = newdata1, clab = c("height", "m"),colkey = list(length = 0.5, shift = -0.1),expand=0.2)

par(mar = c(4, 4, 2, 2))

image2D(z = newdata1, clab = "height, m",colkey = list(dist = -0.20, shift = 0.15,side = 3, length = 0.5, width = 0.5,cex.clab = 1.2, col.clab = "white", line.clab = 2,col.axis = "white", col.ticks = "white", cex.axis = 0.8))


640?wx_fmt=jpeg

##组合persp3D\image\contour

par(mfrow = c(2, 2), mar = c(2, 2, 2, 2))

ribbon3D(z = newdata1, zlim = c(-100, 200), image = TRUE)#彩带图+2D

persp3D(z = newdata1, zlim = c(-100, 200), contour = TRUE)#3D+地形图

persp3D(z = newdata1, zlim= c(-200, 200), phi = 30,contour = list(nlevels = 20, col = "red"),image = list(col = grey (seq(0, 1, length.out = 100))))#大满贯:3D+2D+地形图

persp3D(z = newdata1, contour = list(side = c("zmax", "z")), zlim= c(90, 300),

phi = 30, theta = 20, d = 10, box = FALSE)#3D+地形图,地形图的位置2个,side设置地形图的位置,即sideElevetion这一列滑动的位置

640?wx_fmt=jpeg


##更复杂的多图组合

x<-1:nrow(newdata1)

y<-1:ncol(newdata1)

#首先设置一个3D图,设置contour3D图的下面

persp3D(x,y,z=newdata1,theta=10,phi=20,expand=0.01,box=FALSE,scale=FALSE,contour=TRUE,zlim=c(-100,200),clim=range(newdata1),plot=TRUE)

#Elevation=100的地方添加一个2D

image3D( x, y, z = 100, add = TRUE, clim = range(newdata1),colvar = newdata1, colkey = FALSE, facets = NA,plot=TRUE)

#3D地形图的添加

contour3D(x, y, z = 100,add = TRUE, clim = range(volcano), lwd = 3,colvar = newdata1, colkey = FALSE,plot=TRUE)

640?wx_fmt=jpeg




 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

640?wx_fmt=jpeg

公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享


http://chatgpt.dhexx.cn/article/KXgj04rJ.shtml

相关文章

gma 地理空间绘图:(1)绘制简单的世界地图-1.地图绘制与细节调整

了解 gma gma 是什么&#xff1f; gma 是一个基于 Python 的地理、气象数据快速处理和数据分析函数包&#xff08;Geographic and Meteorological Analysis&#xff0c;gma&#xff09;。gma 网站&#xff1a;地理与气象分析库。 gma 的主要功能有哪些&#xff1f; 气候气象&a…

ArcGIS地图制图

个人学习笔记&#xff0c;仅供学习交流。 参考书籍&#xff1a;《ArcGIS从0到1》 文章目录 专题图的制作一般专题单一符号类别专题数量专题柱状图&#xff08;直方图&#xff09; 符号匹配专题两个面图层覆盖专题设置行政区边界线色带制作 点符号的制作线面符号的制作线符号制作…

R语言绘制地图

R绘制地图的话&#xff0c;大多数用到的包都是maptools&#xff0c;用来读取phd文件&#xff0c;phd文件需要自己提前下载到工作目录&#xff0c;但是大多数phd文件都不能精确到市区。只能绘制声级&#xff0c;国家级和世界地图。 本文以武汉是举例。首先在下列网站地图选择器…

地图区域绘制

背景 需要实现地图区域绘制&#xff0c;并能提供给业务实现联动交互&#xff0c;可以按照省市县进行下钻&#xff0c;地图样式如下&#xff1a; 绘制实现方式 对于这种简约地图区域的绘制&#xff0c;需要提供区域的geo json文件&#xff0c;做地图的公司已经提供这种数据&…

ArcGIS:如何简单地制作一幅专题地图?

目录 01 加载原始数据 02 简单看一下属性表 03 对地块的人口密度用颜色进行分级显示 04 切换到布局视图 05 输出的大小&#xff0c;方向等设置 06 布局视图下的要素编辑 07 插入标题 08 对标题的大小颜色等进行编辑 09 插入图例 10 插入指北针 11 插入比例尺 12 调…

地图之美(地图制图)

开篇 地图学是研究地图的理论、编制技术与应用方法的科学。 现阶段对地图学的定义是&#xff1a;研究地理信息的表达、处理和传输的理论和方法&#xff0c;以地理信息可视化为核心&#xff0c;探讨地图的制作技术和使用方法的学科。 从地图本身概念出发&#xff0c;地图是将客…

在地图上绘制路线图

最近做个项目&#xff0c;官方给了车的一些经纬度数据&#xff0c;为了看的更清楚&#xff0c;需要把数据标注在地图上 想到了两套方案&#xff0c;第一种采用python的folium库 结果遇到问题&#xff0c;数据一多&#xff0c;绘画出来的速度很慢&#xff0c;而且它的某JS插件还…

python绘图——地图

地图相关绘图——basemap 参考1 安装 已安装anaconda的情况&#xff0c;运行一下代码 conda install basemap绘制地图 需导入的包 # 导入需要的包 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap绘制简单地图&#xff1a…

【地图自学系列】二、怎么画地图

怎么画地图 前言一、地球什么样二、怎么画&#xff08;坐标系&#xff09;1.地理坐标系和投影坐标系1.1 地理坐标系1.2 投影坐标系 2.国内常用坐标系3.试试能不能解释这些问题3.1 地理坐标系和投影坐标系的区别&#xff1f;3.2 有地理坐标系后&#xff0c;为什么还需要投影坐标…

pyecharts 地图绘制

环境描述 win11 jupyter notebook 目标效果 世界地图按数据进行分级着色&#xff1b;最终效果图如下&#xff1a; pyecharts 绘制地图时注意点 可以实现目标地图绘制效果的python库很多&#xff0c;这里用的是pyecharts&#xff0c;具体可百度。 最终结果如何以图片形式…

【Python】pyecharts 模块 ⑤ ( 地图绘制 | pyecharts 地图绘制步骤 | 为地图进行全局配置 )

文章目录 一、pyecharts 地图绘制1、pyecharts 地图绘制步骤2、代码示例 - pyecharts 地图绘制3、代码示例 - 为地图进行全局配置 pyecharts 画廊网站 : https://gallery.pyecharts.org/#/ 在该网站可查看官方示例 一、pyecharts 地图绘制 1、pyecharts 地图绘制步骤 首先 , 导…

地图轨迹图怎么做?可以自己绘制路线的地图

地图轨迹图是一种用于表示某个物体在某段时间内的移动轨迹的图表。它可以帮助我们更好地理解物体的移动轨迹&#xff0c;从而更好地分析和研究物体的移动轨迹。 地图轨迹图的制作需要以下几个步骤&#xff1a; 1.准备数据&#xff1a;首先&#xff0c;需要准备好物体的移动轨迹…

聊一聊我常用的6种绘制地图的方法

来源&#xff1a;萝卜大杂烩 今天来讲一讲在日常工作生活中我常用的几种绘制地图的方法&#xff0c;下面我将介绍下面这些可视化库的地图绘制方法&#xff0c;当然绘制漂亮的可视化地图还有很多优秀的类库&#xff0c;没有办法一一列举 pyecharts、plotly、folium、bokeh、base…

HBase数据库表的创建

实验三 HBase分布式数据库操作与编程 1、HBase Shell数据库表创建 【实验内容】 根据以下关系型数据库表&#xff0c;使用HBase Shell设计并创建适宜的HBase数据表。 2、创建表以及插入学生信息数据 &#xff08;1&#xff09;、启动Hadoop &#xff08;2&#xff09;、启…

Hbase笔记 —— 利用JavaAPI的方式操作Hbase数据库(往hbase的表中批量插入数据)

目录 直接在main函数中执行语句借助Test来运行方法删除表修改表结构列出来所有的表插入一条数据获取一行数据创建表批量读取文件中的数据&#xff0c;并且批量插入表中获取一组数据的值利用CellUtil改善读取数据方式 导入依赖 <dependency><groupId>org.apache.hba…

Java 访问Hbase数据库

须知 Hbase数据最终是在hdfs上的&#xff0c;具体来说应该是在hdfs上一个叫做/hbase的目录下。具体结构如下&#xff1a; 所以java访问Hbase其实就是访问hdfs&#xff0c;所以环境搭建跟hadoop开发环境使用没什么不同。 实战部分 1.导入需要的jar包&#xff0c;此处在java项…

大数据之HBase数据库

一、了解HBase 1.1 HBase简介 HBase是Apache的Hadoop项目的子项目 HBase不同于一般的关系数据库&#xff0c;它是一个适合于非结构化数据存储的数据库 建立在Hadoop文件系统之上的分布式面向列的数据库 属于开源项目&#xff0c;可以进行横向扩展 适用于需要实时地随机访问…

pinpoint的Hbase数据库的数据优化

pinpoint的Hbase数据库的数据优化 写的原因&#xff1a; 因为是测试服务器&#xff0c;在运行测试项目时&#xff0c;需要日志的打印输出&#xff0c;由于发现磁盘空间不足&#xff0c;想删除些东西&#xff0c;释放空间&#xff0c;然后发现pinpoint服务的Hbase数据库占据了1…

2.使用HBase数据库操作_实验环境Ubuntu

实验前期准备 ssh localhost //检测自己的ssh服务器设置 cd /usr/local/hadoop ./sbin/start-dfs.sh //启动Hadoop jps //查看hadoop是否启动成功 cd /usr/local/hbase bin/start-hbase.sh //启动hbase jps //查看hadoop是否启动成功 bin/hbase shell //打开hbase的…

猿如意工具Redis数据库,Memcached数据库,MongoDB数据库,HBase数据库等等

按照参考样例&#xff1a; 安装教程 在电脑上安装好猿如意之后。因为第一次使用就搜了下各种数据库使用的方式 猿如意工具 Redis数据库Memcached数据库MongoDB数据库HBase数据库MySQL WorkbenchDBeaverNavicat Lite Redis数据库 点击搜索了下Redis数据库&#xff0c;可看到以…