QGIS如何绘制多图

数据准备

这是一份英国大曼彻斯特地区的数据,里面包含了教育、收入、人口密度、绿地比例、城市比例等数据,我们准备把这些数据在地图上呈现出来,为此,我们需要做在地图中绘制6幅子图,这里的子图类似于matplotlib中的subplot,就是在一幅大的地图中又采用多幅小地图来进行表现。

图层配置

图层分组

图层分组这个设置的作用,可以说是类似于ArcGIS中的DataFrame,通过分组Group来管理不同图层的显示,这里需要做6幅子图,所以将地图分为6个组,可以通过add group 的方式,新建6个分组,然后把数据加载到不同的组别上。

符号分级

符号分级显示是每一GISer最基本的技能,这里就不多赘述,一般通过【properties】->【symbology】即可对图层符号进行分级显示

新建地图布局

ArcGIS是通过布局视图的方式进行地图的绘制,而QGIS则需要通过新建一个地图布局的方式来进行地图的绘制,在这个布局容器的基础上可以添加地图、比例尺、图例、指北针、文本、表格、甚至是图片。

PS: 新版的ArcGIS Pro也是基于地图布局的方式进行地理绘图的

具体的构建方式如下,首先在QGIS的主界面上点击【 project 】->【new print layout】 即可新建一个布局容器

Guider 设置辅助线

在进行地图绘制之前呢,可以对地图提前设置布局,绘制参考线,后面添加地图、图例过程中就不用担心对齐的问题了

add map 添加地图

接下来,就来到了绘制地图最重要的一步,添加地图,通过【add map 】可以将地图子图添加到布局容器中,添加完毕后,通过地图的【item properties】可以设置其属性,调整地图的显示,可以通过【Scale】固定显示比例尺,通过【Position and Size 】-> 【width】、【 height】 规定地图的高度和宽度,【Frame】设置地图的外框显示等。

设置完了上述的属性后,我们需要对需要显示的图层进行设置,通过【Layer】 ->【Lock Layer】、【Lock styles for layers】来锁定我们的图层,当我们选择了这个选项后,无论我们在主窗口中如何调整图层的显示,布局容器中的图层均不在产生变化。

这样,我们需要显示哪个图层组,就先把哪个图层组在主窗口中打钩选中显示出来,然后通过添加地图项的方式加载到布局容器中并锁定图层,这样每个图层组就和每一个地图子图对应起来。这样每个地图子图中的地图不会随着主窗口显示的变化而变化,从而达到制图的目的。

add legend 添加图例

首先,通过【add legend】即可向布局容器中添加图例项,但是这样添加的图例项是包含所有组别的图例,在视图中会占据很大的面积,我们每一个子图只需要其对应组别的图例即可,因此,我们通过取消【auto update】使得我们可以自由的删除、编辑不需要的图例项。

接下来,对图例格式进行设置,一般设置label的字体,字号,项目之间的间距,符号的高度、宽度即可

接下里,修饰图例,删除图例中不需要的部分,隐藏标题和组名,右键点击组名或标题名,选择【 hidden】,完成图例的设置

最后,我们可以复制已经设置好的图例应用到其余图层

add North Arrow 添加指北针

通过【add North Arrow】添加指北针到布局容器中,当然,其他的如比例尺、标题文本等也可以进行添加,这里就不一一演示添加。

导出地图

将图层调整完毕后,可以通过Layout Export to PDF /Export to Image将图片导出

注:出于数据保密的原因,地图的各子图没有设置标题

参考

  1. https://www.youtube.com/watch?v=b14x69LqTZA&ab_channel=WiseGIS
  2. https://www.youtube.com/watch?v=r2EOUH5wsMQ&ab_channel=burdGIS
  3. https://www.youtube.com/watch?v=LB0OsU8cni8&ab_channel=WiseGIS

QGIS打印布局中绘制多个子图的更多相关文章

  1. python使用matplotlib在一个图形中绘制多个子图以及一个子图中绘制多条动态折线问题

    在讲解绘制多个子图之前先简单了解一下使用matplotlib绘制一个图,导入绘图所需库matplotlib并创建一个等间隔的列表x,将[0,2*pi]等分为50等份,绘制函数sin(x).当没有给定x ...

  2. android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

  3. CSharpGL(6)在OpenGL中绘制UI元素

    CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...

  4. 响应式布局中的CSS相对量

    一个响应式布局,要能够根据设备屏幕尺寸的改变,动态的调整页面内容,展现不同的设计风格. 在进行响应式的 CSS 代码编写过程中,经常会用到一些相对尺寸,以达到相对定位的目的.例如,常见的响应式布局中需 ...

  5. C# 如何在PDF中绘制不同风格类型的文本

    通过对控件Spire.PDF的测试,我们可以创建PDF文件并向文档中绘制文本.图片.表格.图形等内容,其中,对于绘制文本这一部分,Spire.PDF提供了三种字体类型来绘制文本,即: Standard ...

  6. Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!

    1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...

  7. Android面试收集录12 View测量、布局及绘制原理

    一.View绘制的流程框架 View的绘制是从上往下一层层迭代下来的.DecorView-->ViewGroup(--->ViewGroup)-->View ,按照这个流程从上往下, ...

  8. IOS自己主动布局中的浮动布局(6)----MyFloatLayout横空出世

    https://github.com/youngsoft/MyLinearLayout 前言 在MyLayout的6大布局中,每种布局都有不同的应用场景. 且每种布局的子视图的约束机制不一样:线性布局 ...

  9. Android_(控件)使用自定义控件在屏幕中绘制一条虚线

    在Android屏幕中绘制虚线,最通用的是自定义控件DashedLine,再将自定义控件放入xml布局中 运行截图: 程序结构 package com.example.asus.gary_042; i ...

随机推荐

  1. 微信小程序电子签名实现

    实现签名方法就是使用canvas <canvas canvas-id="firstCanvas" id='firstCanvas' bindtouchstart=" ...

  2. 基于Ubuntu下以Docker方式gitlab软件的部署

    基于Ubuntu下以Docker方式gitlab软件的部署 目录 基于Ubuntu下以Docker方式gitlab软件的部署 1.安装Docker Compose 1.1 下载curl 1.2 安装c ...

  3. 学习vue遇到的第一个小怪兽:net::err_file_not_found

    问题现象 引入vue.js文件时报错:net::err_file_not_found,我用的是VScode开发工具,调试工具用的Chrome. 解决方案 1.检查路径是否正确 2.检查文件是否有问题 ...

  4. linux学习之路第九天(磁盘分区,挂载详解)

    磁盘分区,挂载 -----分区基础知识 分区的方式 1)mbr分区: 1.最多支持四个主分区 2.系统只能安装在主分区 3.扩展分区要占一个主分区 4.mbr最大只支持2TB,但拥有最好的兼容性 -- ...

  5. [小技巧] Notepad++关闭拼写检查

    From : http://blog.csdn.net/xuefeng0707/article/details/18272989 把[插件]-[DSpellCheck]-[Spell Check Do ...

  6. php弱类型比较

    前言:今天XCTF题目中出现了弱类型比较,特别过来记录一下, 0x01: == 是弱类型比较,两个不同类型比较时,会自动转换成相同类型后再比较值 ===是强比较,需要比较值和类型 0x02: 看下图案 ...

  7. Django基础009--Paginator分页

    1.引入 from django.core.paginator import Paginator 2.Paginator对象提供的方法 articles = models.Article.object ...

  8. .h .cpp区别

    首先,我们可以将所有东西都放在一个.cpp文件内. 然后编译器就将这个.cpp编译成.obj,obj是什么东西? 就是编译单元了.一个程序,可以由一个编译单元组成, 也可以有多个编译单元组成. 如果你 ...

  9. C语言:变量定义

    变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义.变量声明:用于向程序表明变量的类型和名字.定义也是声明,extern声明不是定义 定义也是声明:当定义变量时我们声 ...

  10. 求数组的子数组之和的最大值II

    这次在求数组的子数组之和的最大值的条件下又增加了新的约束:  1.要求数组从文件读取.      2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保 ...