☰
QGIS标注三要素实操指南:字体、字号、颜色如何精准掌控
2026/10/3 3:48:08 网站建设 项目流程

1. 为什么说字体、字号、颜色是QGIS成图的“第一道关卡”

先说个真实感受:很多接触QGIS的新手,地图数据叠加之后,第一件事就卡在“字看不舒服、颜色一片糟”上。矢量数据加载进来了,面边界画出来了,但标注要么是系统默认的宋体小字,密密麻麻挤在一起,要么字号单薄得像细线,放到大比例尺出图时根本没法看。标题里这三个词——字体、大小、颜色,乍听像是软件里“改个属性”的琐事,实际上却直接决定了一张专题图能不能读、好不好读、专不专业,是QGIS从“能把图做出来”走向“能把图做好看”的分水岭。

这三项设置并非孤立存在。字体决定文字长什么样,字号决定它在屏幕和纸上占多大空间,颜色决定它和底图、符号之间的层次关系,三者合在一起,构成了地图标注的“视觉三角”。平时我自己做项目,无论是给街道做人口密度专题图,还是整理野外调查的KML轨迹,真正花心思调的最多的,就是这三个参数。今天这篇内容就是把这些年的实操经验整理出来,围绕QGIS里字体、大小、颜色设置的完整逻辑和常见坑位,给新手一个可以直接照着操作的路线,也给已经会用基础功能的同行一个查漏补缺的机会。

这篇文章面向两类人:一类是刚装好QGIS、还在“能加载图层但不会出图”阶段的人,另一类是做规划、勘察、林业、水文相关工作的从业者,需要在短时间内把成果图做到能汇报、能归档。两种人看的角度不同,但下面的内容都能直接用上。

2. 字体设置:从选择字体到字体“隐身”问题的完整玩法

2.1 四个常见的字体设置入口,不要只知道“标注”面板

很多人在QGIS里找字体设置,第一反应是打开图层属性,切到“标注”选项卡,在“格式”里找字体下拉框。这个路径没错,但“字体设置”在QGIS里的实际分布范围更广,至少涉及四个位置:

  • 图层属性-标注-格式:最常用来设置单个图层标注的字体、字号、颜色。
  • 图层属性-标注-缓冲区设置:不是字体本身,但影响字的可读性,配合字体一起调才有效。
  • 项目-属性-默认样式:调整项目级默认字体,用于标题、图例、比例尺等制图元素,以及新图层默认采用的标注样式。
  • 布局编辑器:出图时地图内外的标题、图例、指北针文字是独立于图层标注的,需要单独设置。

我的习惯是“先建模板再调单层”:先在一个空项目里把默认字体调成常用的黑体或微软雅黑,之后每次新加图层,标注样式都会继承这个设置,省去逐层重复改的时间。很多人没意识到项目默认样式这层逻辑,结果每个图层都要重新选字体,一个几十层的项目改下来大半天就没了。

字体下拉框里实际上不只显示系统中安装的字体。Windows系统自带的字体足够日常用,但到了出报告、送审场景,经常会用到仿宋、楷体、黑体这类中文字体,而这些字体在某些精简版系统里未必装全。如果下拉列表里看不到某个特定字体,先确认它是否真的装进了系统。QGIS自身不管理字体文件,它只是调用操作系统的字体接口,系统里没有的字体,QGIS这边再折腾也选不到。

2.2 为什么标注会出现“口口”乱码,怎么排查

这是我在群里见过最多的问题之一:矢量数据一部分标注正常,一部分显示成方框或乱码。排查顺序非常固定,按照“编码-字体-数据内容”三层走基本不会错。

先从数据属性表看字段内容,如果属性里确实是中文但图上显示乱码,多半是数据源编码问题,比如Shapefile的.dbf文件编码声明不对,这种情况要到“数据源管理器”或使用内置函数转换编码,跟字体本身无关。如果属性表正常、属性正常,但字体渲染成方块,那就是字体不支持该字符集,比如选用了一款纯英文字体来显示中文,系统找不到对应字形就会“画”一个方框占位。

再有就是字段值本身存在换行或特殊控制字符,会让标注显示异常。这种坑最隐蔽,看起来像字体问题,实际是数据问题。我的建议是排查时先双击图层打开属性表,用表格预览和地图标注并排对比,先确认数据内容本身是好的,再调整字体设置,能省掉大量无用功。

字体缺失还有一个连锁问题:项目A在装了某字体的电脑上正常,拷到别的电脑打开,所有标注全部替换成默认字体,排版全乱。原因就是目标电脑没装这个字体。交叉协作时,要么将常用字体一并提供给对方,要么在项目属性里勾选“允许图层标注使用自定义字体”并把字体路径设置到项目相对目录,要么干脆选择极为通用的字体、接受一定程度的样式偏差。从稳定角度讲,多部门协作我一般用黑体或思源黑体,部署成本最低,基本不会出乱子。

2.3 字体还能跟着字段走?用“数据定义覆盖”做动态字体

字体这种东西,许多人觉得一旦定下来就是死的,但在QGIS里,字体下拉框右侧有一个很不起眼的小按钮,点击后可以切换到“数据定义覆盖”模式,让字体名称根据属性值动态切换。实际应用场景很典型:一个图层里的点要素分为“重要点位”和“一般点位”,用同一层标注时,想让重要点位的名称用加粗黑体,一般点位用常规细体,就可以添加一个表达式。

表达式写法不复杂,典型的是:

CASE WHEN "等级" = '重要' THEN '黑体' WHEN "等级" = '一般' THEN '微软雅黑' ELSE '宋体' END

把这段写到字体字段的数据定义覆盖处,标注就会按等级自动切换字体。这套逻辑同样适用于字号、颜色、字间距、行间距,需要强调的是,数据定义覆盖里的表达式值必须是该属性所期望的类型,字体字段返回字符串、字号字段返回数字、颜色字段返回颜色字符串或颜色表达式。写错类型不会报错,但设置会静默失效,导致“明明配好了却不生效”,这类问题在排查时要优先想到。

这里还有个经验分享:做动态字体时,务必先确定整个图层统一的基准样式,再对需要“特殊化”的要素做覆盖,不要反过来把所有属性都变成表达式。因为表达式越多、项目越慢,而且后续维护难度成倍上升。能用多级符号渲染拆分的图层,优先用符号分层,而不是在一个图层里堆大量动态覆盖。

3. 字号大小:三种单位的取舍思路与动态字号控制

3.1 点、毫米、地图单位到底有什么区别,什么时候用哪种

字号不是单纯填一个数字,关键在于“这个数字代表什么单位”。QGIS标注字号默认是“点”(磅),但下拉选项里还有毫米、地图单位、像素。很多新手图省事,一直用默认的点,等到缩放地图时发现:字忽大忽小,出图时和预览时完全两码事。这正是因为字号跟随屏幕DPI和地图缩放走,呈现尺寸不稳定。

这里把四种单位的核心差异讲透:

单位实际含义适用场景典型问题
点(pt)固定物理尺寸,屏幕显示随缩放倍率变化常规屏幕浏览、交互式编辑导出大比例尺图片时,字显得过小
毫米(mm)固定物理尺寸,适合印刷和精确排版出图打印、纸质成果在屏幕上看偏小,需要放大地图
地图单位随地图比例尺绑定,如米、度大范围、尺度稳定的专题图在不同投影下数值意义变化大
像素(px)与屏幕像素关联,适合UI界面快速预览、界面要素换分辨率设备显示不一致

从实用角度说,日常做屏幕分享、汇报PPT,用“点”就够了;如果是最终要出A3/A4纸质图,把字号统一成毫米更稳,可以保证打印结果的确定性。选毫米还有个附带的好处:自动避让和标注放置算法对毫米级别的位置判断更接近输出效果,不像点单位那样在缩放时不停变动。

做KML轨迹里程统计时,我常把轨迹起点和终点的标注字号设成一个固定毫米值,这样在不同缩放级别下路线的起终点名称保持在印刷成品中一致的观感,不会被比例尺变化“冲散”。出发点很简单:既然目标是出图,那么一切预览时的字号调整都要以最终输出载体为准。

3.2 用表达式让字号跟着数据走,标注不再“一视同仁”

数据定义覆盖在字号方面的应用,比字体还实用。最经典的是“按数量级放大标注”:比如聚落点,人口1万以下用8号字,5万以上用14号字。表达式写法:

CASE WHEN "人口" >= 50000 THEN 14 WHEN "人口" >= 10000 THEN 11 ELSE 8 END

写好后选择输出类型为“数字/整数”。如果你处理的是连续变化数据,还可以用比例缩放,比如:

2 + log("人口") * 3

这样人口越多,字号以对数形式增长,避免极端值把字撑得过大。对数缩放的好处在于它对“倍率关系”的描述非常贴合视觉感受,大数值之间不会拉得太开。做资源分布图时,用这个方式给不同的采样点赋予不同字号的编号,比统一字号清晰得多。

字号动态变化后,要配套做一件事:检查标注的碰撞避让。QGIS的标注引擎在字号差异很大时,会优先放大字号的标签、牺牲小字标签,如果两个重要标注位置相邻,你可能发现其中一个“莫名其妙消失了”。这时候需要在“标注-设置-碰撞检测”里调整优先级参数,或者把重要点位的标注优先级调高。不调整的话,动态字号效果再好,图面上会出现关键信息缺失,反而比统一字号更糟糕。

使用“地图单位”做动态字号时还要留一个心眼:如果数据跨了很大的空间尺度,一个县范围内的图和一个市范围内的图,同样是“按地图单位=8”,显示的物理尺寸完全不同。所以如果是多尺度发布的底图,地图单位会因为比例尺差异带来标注过大或过小的问题,这种情况下我建议还是用“点”或“毫米”,让标注在视觉上保持稳定。

4. 颜色设置:调色板、表达式取色与分类着色

4.1 调色板与“收藏颜色”怎么配合使用,效率最高

QGIS颜色设置的核心入口还是“标注-格式-颜色”,点击颜色框之后会弹出标准的颜色选择器,支持RGB、HSV两种模式,也可以直接输入十六进制色值。这个小弹窗里有一个说得上宝藏但很多人没注意的功能——调色板,里面除了默认色板,还允许你自己定义一套“收藏颜色”。

做多图层专题图时,高效的做法是先把项目要用的标注色、符号填充色、边框色整理进收藏颜色。比如底图要素统一用浅灰、专题要素用深蓝、强调要素用橙色,每次调整直接取收藏色,保证全图配色一致性,不会因为“凭感觉取色”导致同一图层在不同比例尺下颜色深浅不一。这点在领导审图场景特别重要,地图配色乱不乱是专业度最直观的体现。

颜色设置有一个非常大的误操作风险:同样的要素,在符号填充和标注文字上分别用了亮黄和亮白,结果在全屏预览时文字完全融进了填充色,看不清。排查这个问题时,只调文字颜色没用,要把填充、描边、标注统一协调。我一般的做法是标注文字先选一条和填充色拉开亮度差的色,亮度差足够大时,即使色相相近也不至于糊成一团。

4.2 用颜色表达式做“条件变色”,比手动改色高效得多

QGIS不仅允许颜色框手动填色,还支持表达式函数。数据定义覆盖里,颜色这一项可以用颜色函数动态生成。最常见的函数组合是color_rgb()、color_hsl()、color_hex(),以及带透明度的color_rgba()。

实际例子:洪水淹没图上,不同等级的风险点用颜色区分,不想做多图层拆分,可以直接在标注颜色里写:

CASE WHEN "风险等级" = '高' THEN color_rgb(255, 0, 0) WHEN "风险等级" = '中' THEN color_rgb(255, 165, 0) ELSE color_rgb(0, 128, 0) END

写完记得把输出类型设置为“颜色”。和字号的动态控制同理,这里返回类型错误也会静默失败,常见错误是返回了颜色名称字符串而不是颜色对象,例如直接返回'red'在某些版本里能识别、某些版本里不识别,色彩函数本身更稳妥。

另一个场景是透明度动态控制:把RGB三个通道设成固定值,A通道用字段控制,实现按属性“淡化”显示不重要的点。比如:

color_rgba(50, 50, 200, CASE WHEN "置信度" > 0.8 THEN 255 ELSE 80 END)

这种动态透明度在数据检查、质量验证时非常有用:高置信度的点完全清晰显示,低置信度的点半透明下沉,避免了大量符号堆叠时互相遮挡的问题。

4.3 分类着色的颜色方案怎么选,避免“彩虹图”灾难

如果一张图里有几十个分类类别,每个类别用不同颜色,新手往往做出来一道彩虹,色相过多、明度不均,分不清主次。QGIS提供了“分类-基于颜色方案”的色带选择,但真正专业制图会用“同类色系深浅分级”代替多色并立。也就是说,一套色彩、由浅到深排列等级,而不是红橙黄绿青蓝紫轮着来。

我自己常用的套路:连续数值用单色渐变色带,比如浅黄到深橙,分类数据用少色相、多明度组合,比如“高-中-低”三档就用“深色-中色-浅色”表达。这个思路放到标注文字颜色上也通用:要点标注用深色,次要内容用浅色,图面主次关系就自然出来了。

分类着色的颜色选择器在“符号化-分级”页面里,但要注意它只影响符号填充和描边,不会自动联动标注文字的颜色。分级设好后,如果标注文字颜色还是默认黑色,会让图面变得突兀。最好统一在标注颜色里用一个更柔和的深灰色,比如#404040,既保留可读性,又不抢分级符号的视觉注意力。深灰比纯黑耐看,这是制图排版里一个便宜好用的小技巧。

5. 综合实操:分式标注、KML里程数字标注的落地案例

5.1 分式标注其实不需要第三方插件,纯表达式就能做

“分式标注”需求在自然资源、林业调查场景特别常见:分子是地块编号,分母是地类代码,中间一条横线,整体像分数一样压在面中心。很多新手第一反应是找插件,实际上QGIS的标注引擎配合简单表达式就够了。

核心思路是利用多行标注和一个横向边框线模拟分数线。打开标注-格式-表达式,输入类似:

"C地块编号" || '\n' || '————————' || '\n' || "地类代码"

再配合行高度、垂直对齐等参数,就能达到目视一致的分式效果。不过这里有个细节值得注意:分数线建议用全角的横线符号,或直接用字符重复的方式生成固定长度横线,避免因字段长度不同导致分数线长短不一。想要更规整,可以用自定义“背景形状”加图层,在标注的背景选项里勾选一个白色矩形、加上边框线,从视觉上形成“分式框”。

分式标注的字体、字号、颜色其实和普通标注完全一致,可以在格式面板统一调。唯一需要注意的问题是,多行标注的垂直对齐方式要设置为“中部”,否则整个分式会在面中心偏上或偏下,难以对齐地图要素。做分式的时候,不要忘了在“渲染”里开启标注的背景透明和缓冲区,防止分数线和底图的地类边界线互相干扰。

5.2 KML路线公里数怎么算出来并标注到图上

和标题配合紧密的还有一个高频场景:拿到外业跑的KML轨迹,想知道总里程多少公里,并把KML文件的路线名称或里程数字标注到图上。热搜里“qgis 统计kml路线公里数”就是这个需求。

做法不复杂。先把KML拖入QGIS,它会生成“轨迹”和“路径”两类数据。路径一般是LineString类型。打开路径图层的属性表,用字段计算器新增一个双精度字段里程km,输入表达式:

round($length / 1000, 2)

这里$length返回的是地图单位下的长度,若数据源是经纬度坐标系,需要先将图层投影转换到合适的投影坐标系再计算,否则算出来的是度,不是米。正确做法是先右键图层-导出-要素另存为,选择“WGS 84 / UTM zone 49N”或当地区域投影,SRC设置为目标CRS,让计算基于平面距离。

算好后,给路径图层打开标注,表达式填:

concat("name", ' ', "里程km", ' km')

字号和颜色用前面讲的数据定义覆盖或直接在格式里设置。如果想额外在图面标出起点和终点名称,可以借助几何生成器或使用“点”图层补齐。这样一张KML轨迹图,既有路线名、又有总里程、起终点文字,直接就能输出给项目方。

实际经验里有一个坑:KML文件的name字段在个别采集设备导出的数据里是空字符串,标注出来只有一串数字而没有路线名。处理方法是清理数据时先判断是否为空,表达式用if()函数兜底:

if("name" IS NULL OR "name" = '', '未命名路线', "name")

这样至少保证每个标注都有内容,出图不会被一片空白“卡住”。KML轨迹叠加底图时,如果底图用的在线地图图层,文字标注和底图文字的层级冲突无法完全避免,此时给轨迹标注加上白色缓冲区是非常必要的,它把图上自己的文字和底图文字分隔开,大幅提升可读性。

5.3 调整字体颜色适配深色底图的快速方法

做夜间灯光、热力图这类成果时,底图往往是很深的配色,标注如果仍是黑色,等于白写。最省事的办法是在标注颜色里选一个亮色,比如白色或浅黄,然后叠加粗一点的深色缓冲区,形成“亮字暗底”的轮廓效果。

但事情没这么简单:有些底图是局部深、局部浅,比如卫星影像叠加到水域和密集建成区时差异极大,一张图上用单一字色总会有一片区域看不清。这个问题我目前比较推荐的方案是“半透明缓冲区”:给标注加一定透明度的深色缓冲区,比如黑色透明度70%,缓冲区宽度给到2-3毫米,等于在文字背后垫了一层深色“剪影”,无论底图深浅如何,文字都保持可读性。这个操作在标注-缓冲区里设置,只有一个参数,作用却极大,做遥感影像解译标注时几乎是必选项。

如果你的坐标系工程和在线底图投影不一致,还会出现标注“被甩到底图外面”的匪夷所思现象,位置明明正确但就是显示不出来。这大概率是工程CRS没有自动转换,在项目属性里把“投影”的CRS选项设为自动,或手动设置一个与在线底图一致的坐标系即可。这个问题表面上是“标注位置不对”,根源是坐标参考系统没有对齐,和字体颜色无关,但排查时容易被误判,在这里一并提醒。

6. 常见问题与排查实录:那些年标注设置踩过的坑

标注不生效、样式不对、导出异常,这类问题几乎每个QGIS用户都会碰到。我把高频问题整理成一张速查表,按“现象-原因-解决”三步罗列,直接对照排查。

问题现象可能原因解决办法
标注一个都不显示图层缩放范围限制,标注被隐藏取消“标注-显示”里的比例尺范围限制
标注文字挤成一团碰撞检测被关闭,或字间距、行间距为负值开启碰撞检测,在格式里调回默认行距
中文显示为方框所选字体不支持中文字符切换到黑体、宋体等中文字体
标注与符号颜色混淆文字颜色和填充色太接近拉开亮度差或加文字缓冲区
设置改了但图没变化数据定义覆盖被激活但表达式类型错误检查表达式返回类型是否正确,并清除覆盖
导出PDF后字体丢失PDF导出时未嵌入字体或字体不规范在导出选项里选择“总是导出为矢量”,确保字体嵌入
标注位置自动偏移标注放置算法与数据密度冲突手动调整放置优先级,或改用“偏移的点和线”标注方式
KML里程算出来显示为度坐标系为经纬度,未做投影转换先导出到合适的投影坐标系再计算

加粗的那个“设置改了但图没变化”是我见过最多的闭门问题。不好好解释不行,这里展开说。数据定义覆盖功能强大,但它会在表达式启用时“接管”你在格式面板里的手动值,导致你手动修改后看不到任何变化。很多人不知道这一点,来回改了几十次,越改越绝望。排查时,右键图层属性,在“字形”或“颜色”设置右侧点击按钮,选择“全部重置为默认”,恢复成手动模式,问题立刻消失。这只是排查方法,不代表你不用动态样式,而是你要意识到动态覆盖和手动设置是互斥的。

6.1 导出PDF或图片后字体发虚怎么处理

出图阶段,字体问题集中爆发:屏幕上明明很好,一导出PDF或打印出来的图字迹发虚、笔画断裂,甚至部分标注直接消失。原因通常落在两个方面。

一是导出设置。QGIS导出PDF时,默认会尝试把标注转成文字对象。如果项目里用了系统没有的字体或字距过紧,转出来的文字对象在PDF阅读器里会显示异常。解决的技巧是在导出对话框中勾选“总是导出为矢量”或“导出为栅格(无丢失)”,再在高级选项里选中“嵌入字体”,这样PDF便携性和显示兼容性会好很多。打印机构经常遇到这类问题,图纸上看不清标注,多半就是这里没有设置。

二是DPI设置。导出图片时分辨率低于图像本身的像素需求,字就会看起来很“虚”。如果是要放大打印的图,建议导出DPI不低于300,甚至设置到600。虽然文件变大,但文字边缘清晰度和印刷物观感完全是两个层次。配合毫米字号,输出最具确定性;配合点字号,高DPI导致字号变大,也可能改变整图排版。

6.2 标注样式“怎么调都不对”时,试试这个釜底抽薪的办法

标注样式涉及字体、字号、颜色、缓冲、阴影、位置、优先级等多个相互作用的维度,一个维度的改动经常带动其他维度的连锁变化。如果你已经陷入“越调越乱”的循环,我个人经验是:别在现有样式上继续修,把标注先彻底关掉、回到基础图形,然后新建一个简单的标注样式,一步一步从字体开始重新搭。

这个“从零重建”的思路能在五分钟内解决纠缠一个小时的困惑。具体步骤是:在图层属性-标注里切换到“不显示标注”,应用;然后再切回“显示标注”,清空说明文字,重新设置表达式和格式。每设置一项就点击一次“应用”看效果,确认一项对了再动下一项。这个方法听着笨,实际上防止了多变量同时失控。

还有一种极其隐蔽的标注异常:标注样式里的字体、字号、颜色都正确,但“格式”里设置了错误的对齐方式或文本旋转角度,导致文字被拉伸、旋转或翻转。要排除这类问题,可以把文本格式中的旋转角度设回0度,对齐方式设为默认,再看效果是否恢复。

写在实操之后

字体、大小、颜色这三个看似零散的点,其实贯穿了QGIS从数据加载到成果输出的整条链路。真正把这些设置吃透,靠的是一次又一次出图后的“看不顺眼”。我自己也是在做了几十张专题图之后,才慢慢养成一个条件反射:拿到一个新图层,先定坐标参考,再配底图色系,然后是标注字体和字号的基准样式,最后才去处理那些需要特殊化的要素。

如果你刚开始接触QGIS,不用急着把所有设置都学会,先把字体、字号、颜色这三板斧练顺,再配合比例尺和图例的调整,做出来的图就能超过半数同水平使用者。后续如果碰到“标注遮挡了关键要素”或者“符号大小与文字比例失衡”这类进阶问题,再回头审视今天讲的动态覆盖和分级着色逻辑,很多疑惑会迎刃而解。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询