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