资讯详情

30天地图挑战复盘:用QGIS与Python打造数据可视化作品集

📅 2026/9/15 2:10:06 | 华诺云谱 👁 阅读
30天地图挑战复盘:用QGIS与Python打造数据可视化作品集
2023年11月我给自己挖了一个坑30天地图挑战。这个玩法在数据可视化圈子里已经流行了好几年规则很简单——每年11月社区每天抛一个主题词参与者用一张地图去回应该主题连做30天。国内知道的人不多但我当时决定赌一把如果能完整跑完这一个月等于强制自己每天完成一次“数据到地图”的完整生产流程比上任何网课都来得实在。最终我做到了过程中也踩了不少坑这篇就当一次复盘把工具选型、数据源、避坑清单和每天的实际产出全部摊开来讲。这个挑战适合什么样的人我觉得三类人收益最大一是GIS或数据分析从业者想补足可视化表达这块短板二是规划、地理、社会学等专业的学生需要积累作品集三是纯粹喜欢地图的业余爱好者想用一个月培养一个硬核爱好。它要求的能力门槛不高关键是每天愿意拿出30到90分钟连续30天不断更。这听起来容易真正做到之后我才明白它考验的其实不是技术水平而是你把一件事坚持做完的耐心。1. 项目概述30天30张地图究竟在挑战什么1.1 这个挑战的真正规则很多第一次听说这个活动的人会问每天一张图真的有那么多东西可画吗答案是画什么由当天的主题词决定而主题词每年都围绕地图学的核心元素展开比如点、线、面、河流、道路、地形、人口、夜间灯光等。社区会提前公布当月全部主题但细节相当宽泛每个人都可以用自己的方式解读。回归本质这个挑战并不在乎你做的是专业级GIS分析还是可爱的手绘地图。有人用QGIS做严谨的专题图有人用R语言画统计地图还有人直接用AI或iPad手绘。重点在于“每天完成一次创作”让输出变成习惯。我曾经见过有参与者用一杯咖啡渍画地图来回应“液体”主题也有人用编织毛线的方式做“纹理”主题。这些作品的共同点不是技术复杂度而是创作者真的在思考“地图还能用什么方式表达”。我选择了一条相对保守又实用的路线以QGIS和Python为主力工具兼顾数据分析和视觉美感。前期先做标准专题图后面逐渐加入手工修饰和风格化渲染。这样既能保证出图效率也能在过程里真正锻炼技能。1.2 为什么这件事值得花一个月去做坚持30天的收获远不止“获得30张图”这么简单。首先是技能上的强制提升。平时做地图可能一个月才操作一两次很多功能用过就忘。高频创作状态下你会被迫熟悉图层管理、投影转换、符号化设置、打印布局、色彩搭配等全流程。第二周开始很多操作已经变成肌肉记忆。其次是作品集的积累。30张围绕不同主题的地图作品是你动手能力的直接证明。对找工作或接项目来说这比嘴上说自己懂GIS有说服力得多。我的其中几张作品后来被拿去做了公司内部分享还有一张被我打印出来挂在工位旁边这些都是意外的正向反馈。第三个价值是社区反馈。挑战期间必须公开发布作品会有来自全球各地的制图爱好者评论和转发。你会发现同一主题别人用了完全不同的数据源和表达方式这本身就是最好的灵感来源。不少人还会在每张图下留言提问比如数据从哪里下载的、配色怎么调的、某一步效果怎么实现的每次解释都逼着我把自己学到的知识系统化。1.3 一个月的全景规划参加挑战之前我先想清楚了整个月的进度分配避免前松后紧。我的安排是这样的第一周主攻基础图形与坐标系把点线面三大要素各做几张同时解决字体、比例尺、指北针这些细节规范。第二周主攻专题图与数据叙事用人口、气候、交通等公开数据做信息密度更高的作品。第三周主攻开放数据获取与清洗尝试从OpenStreetMap等平台抓取真实POI和路网数据。第四周主攻创意视觉做3D地形、等高线、手绘风、像素风等风格化作品作为收官彩蛋。实际执行中情况当然会变化比如碰到难产的主题会花更多时间顺利的时候一天能出两张。但这个框架帮我保证了挑战的整体节奏也让我在灵感枯竭时不会陷入“不知道做什么”的恐慌。2. 前期准备工具链、数据源与最小工作流2.1 工具选型QGIS Python为主其他为辅30天做30张图工具效率直接决定每天能不能睡好觉。我最后敲定的主力工具组合如下QGIS用于交互式探索、人工调整符号样式和打印布局。它免费开源、插件丰富几乎能处理所有常见地图问题是公认的GIS瑞士军刀。Python GeoPandas用于批量数据处理和高频出图。GeoPandas可以像操作Excel一样操作地理数据配合matplotlib能在几行代码内产出一张基础地图适合量大时间紧的场景。Tableau Public或Flourish用来做快速原型或交互式草稿。有时候需要先看看数据分布长什么样用这些工具拖拽几步就能获得初步判断。Figma或Illustrator做最后版式调整和文字标注。很多地图最终输出版式其实是在矢量设计软件里完成的。我为什么不只用一个工具因为没有任何单一工具能在所有环节都高效。QGIS适合精细调整但自动化能力偏弱Python适合批量处理但交互式探索地图样式不如QGIS直观。组合使用不是炫技而是让每个工具承担它最擅长的部分。比如我先用QGIS做数据探索和样式草稿确认设计方向后再用Python脚本批量出图最后用Figma补一层标题和注释。整套流程实测非常稳定。2.2 数据源清单去哪找靠谱的地理数据地图挑战最怕的不是不会画图而是找不到数据。前三天我基本都花在数据检索上。下面这份清单是按我自己的使用频率排出来的全部是公开、免费且版权友好的数据源适合拿来做练习数据源主要用途获取方式注意事项Natural Earth全球自然地理底图包括海岸线、河流、国界、地形着色官网直接下载矢量或栅格数据尺度偏宏观适合世界地图和洲际专题GADM全球各级行政区划边界官网按国家下载GeoPackage数据精度不同国家差异明显需按需筛选用OpenStreetMap道路、建筑、POI、水系等矢量数据官网导出或通过Overpass API按范围抓取数据量大导出时一定要注意边界和过滤条件OpenTopoData全球SRTM和ASTER数字高程模型官网下载GeoTIFF处理3D地形图必备各地政府开放数据平台人口、交通、公共设施等专题数据各城市数据开放网站坐标系可能不统一需要先做投影转换US Census / Eurostat美国与欧洲人口、经济等统计专题官网CSV边界文件用于海外案例练习很好用这些数据源已经覆盖了绝大多数日常制图需求。如果做国内某个城市的分析优先找本地政府的开放数据平台如果做全球尺度的图案Natural Earth最方便如果做街区尺度的精细分析OpenStreetMap的POI和路网数据基本是唯一选择。需要特别提醒的是数据下载后务必记录数据来源和坐标系信息否则后续处理很容易出现误差。2.3 先跑通一套最小工作流再谈30天正式挑战开始前我花了大概三天时间准备了一个“地图生产模板”确保每天要做的不是从零开始而只是填充内容。这个决定后来帮了大忙因为难度最大的那些天模板直接帮我节省了半小时以上。最小工作流包含四步数据清洗、数据分析、地图绘制、导出发布。下面是一段我当时常用的GeoPandas出图脚本去掉业务细节后差不多是这个样子import geopandas as gpd import matplotlib.pyplot as plt # 1. 读取数据 gdf gpd.read_file(data/parks.geojson) # 2. 检查坐标系必要时转换 print(gdf.crs) gdf gdf.to_crs(EPSG:3857) # 3. 绘图 fig, ax plt.subplots(figsize(8, 8)) gdf.plot(axax, color#2E7D32, edgecolorwhite, linewidth0.3) ax.set_axis_off() # 4. 导出 plt.savefig(output/parks_map.png, dpi300, bbox_inchestight)这套流程看上去简简单单但它是整个30天挑战的操作基础。后面的所有进阶操作比如添加底图瓦片、叠加多个图层、调整图例和标题本质上都是在这个框架上做加法。2.4 给中国用户的一个提前预防中文字体如果是直接用数据生成英文标签的图表一般不会有字体问题。但我在挑战中大部分作品带有中文标题和注记于是字体渲染成了第一个拦路虎。matplotlib默认字体不支持中文跑出来的图全是方框QGIS在某些环境下渲染中文注释也会出现缺失字形。我的解决办法是提前下载并注册开源中文字体比如思源黑体Noto Sans SC和文泉驿微米黑然后分别配置到系统和软件里。在matplotlib里可以通过以下方式设置全局字体import matplotlib import matplotlib.pyplot as plt # 配置中文字体 matplotlib.rcParams[font.sans-serif] [Noto Sans CJK SC, WenQuanYi Micro Hei] matplotlib.rcParams[axes.unicode_minus] False # 解决负号显示问题QGIS里则在“设置→选项→字体”里把默认字体换成思源黑体。这个操作看似不起眼但若不提前做任何一张带中文的地图都会当场翻车。3. 30天实操记录四周完成四层进阶3.1 第一周基础图形与坐标系理解挑战的头七天我的核心目标是夯实基础不做花哨操作。Day 1到Day 3分别做了点、线、面三类基础地图餐厅点评分布点图、主要河流线条图、城市建成区面状图。这些作品技术难度不高但配合了不同的视觉主题比如点图用大小和颜色表示评分高低线图用线宽表示河流流量等级面图用渐变色表示区域面积大小。Day 4到Day 6开始进入坐标系改造。这是很多新手最懵的部分但实际上只要记住一个原则就少走很多弯路WGS84EPSG:4326是经纬度坐标适合存储和交换数据Web MercatorEPSG:3857是网络底图常用的投影适合配合在线瓦片底图而UTM之类的投影坐标系适合做面积、距离的精确计算和局部细节分析。我故意在第5天做了一张在Web Mercator投影下放大多倍的城市路网图可以清楚看到高纬度地区道路变形的情况这比空讲理论直观得多。第7天做了第一张完整的专题图——用点密度图表现某区域公共图书馆分布算是整周学习成果的一次汇总也顺手验证了前面配置的中文字体没有白折腾。这周踩过最深的坑来自比例尺。因为第一次出图时忘记设置图幅尺寸导出的PNG在微信上发送后被压缩很多细线直接糊掉了。从那以后我强制自己所有作品至少按300dpi导出重要作品直接导出PDF再转图片细节保留程度完全不一样。3.2 第二周专题图与数据叙事能力从第二周开始我不再满足于“把数据画出来”而是开始思考“这张地图要告诉读者什么结论”。这个视角的转变是我整个30天里最关键的突破。Day 8的主题适合做人口类分析。我用全球夜间灯光遥感数据做了一张合成图灯光亮的区域和人口密集区很好地重合视觉效果震撼数据来源也容易解释。Day 9做了某城市的人口密度格网图把人口数据以1km×1km网格呈现比传统的行政区划级别地图细腻得多也更适合分析城市内部的差异。Day 10到Day 11围绕气候与温度展开。我下载了多年平均气温的栅格数据用QGIS的等值线工具生成温度等值线图再用色带叠加在底图上。这张图的制作过程让我意识到栅格数据的可视化和矢量数据完全不同它更依赖色彩映射方案的科学性颜色选错了很容易产生误导。Day 12做了交通路网强度图用的数据来自OpenStreetMap通过给道路按类型赋予不同线宽和颜色一眼就能看出整个城市的路网骨架。Day 13尝试把多个专题整合到一张图里比如叠加道路、地铁线路和主要公共设施。这张图信息量很大排版成了难点我最终用了“主图插页”的方式解决。第二周结束的时候我已经能比较熟练地回答读者最常见的两个问题“你的数据从哪来的”和“为什么这样配色”。前者靠数据源清单后者靠反复试验积累出来的色彩经验。3.3 第三周开放数据与隐藏信息挖掘进入第三周数据获取的难度开始成为主旋律。Day 15我从OpenStreetMap抓取了一个城市全部公园的边界和出入口POI数据用GeoPandas做缓冲区分析画出公园周边500米步行范围覆盖图。这张图的实际价值不低它可以直接用来评估城市绿地服务的公平性问题属于“一张图讲清楚一件事”的典型案例。Day 16到Day 17处理的是路网和公交数据。Overpass API下载公交站点时我只保留了包含“bus_stop”标签的节点数据再用连接线画出相邻站点之间的拓扑关系。从结果看城市中心区域的连接密度明显高于外围这也是都市交通分析里经常见到的“核心-边缘”结构用地图呈现出来比纯数据表更有冲击力。Day 19是这周最有意思的一天。主题与“再利用”相关我选择把城市里的废弃铁轨数据提取出来叠加在当前的道路和绿地上制作出一张“城市废弃空间潜力图”。这类地图的特点是数据并不新但通过空间叠加分析得到信息增量让旧数据焕发新用途。做这类数据挖掘时我逐渐摸索出一套效率较高的操作流程先在QGIS里快速浏览数据判断范围和质量再用Python做裁剪、合并、筛选等批量操作最后回到QGIS或matplotlib完成成图。这个过程看似多了一步实际上比一开始就写Python要快因为很多数据质量问题只有在可视化之后才能发现。3.4 第四周创意视觉与风格化输出最后一周我决定暂时把“严谨分析”放一边专心做视觉上更有趣的作品。这也是30天挑战里最受欢迎、转发量最高的一个阶段因为观众往往对好看的东西更感兴趣。Day 22做了3D地形图用OpenTopoData下载的数字高程模型加上QGIS插件生成了带阴影的山体渲染效果。Day 23做了等高线密度图从同一个DEM提取等高线后用渐变线宽表现坡度变化。Day 24尝试了像素风地图把栅格数据分辨率降到极低让每个像元成为可见的方块再配合马赛克配色氛围感一下就出来了。Day 25做了手绘风城市街区图。这里没有用任何AI滤镜而是把建筑轮廓数据导出为简单线框再叠加柔和纸张纹理背景营造出手绘感。Day 26做了主题为“河流”的线条艺术作品把全球主要河流数据简化成流畅曲线只保留视觉节奏不追求地理准确性。这张图的制图逻辑和传统专题图完全不同它更接近设计作品。Day 28到Day 30连续三天我把前三周学到的技能全部串起来第一张做的是“城市的昼夜活动热力叠加图”第二张做的是“多维数据组合海报”第三张则是整个挑战的总结作品——我把30天中每天产出的缩略图按日历网格摆在一张图上左边标注主题右边配上创作心得作为整个挑战的一页目录。这周让我认识到地图创作的终点不只是信息传达更是情感表达。技术能力保证你能准确画出目标区域但风格和审美决定作品能不能被更多人记住。4. 常见问题与避坑指南4.1 坐标系统的三个经典误解整个挑战期间我被问得最多的问题都集中在坐标系统上。很多人以为坐标系只是“经纬度一下的事情”结果处理出来的地图要么位置偏移要么面积明显错误。实际有三个高频误区值得多说几句第一个误区是“数据保存格式不影响坐标”。GeoJSON、Shapefile、GeoPackage这些格式本身不含有坐标信息的概念问题在于数据内部记录的CRS字段是否被正确保留。如果读入数据后坐标值显示为三四百开头的八位数那十有八九是投影坐标如果显示为一百多或几十的小数则是地理坐标。检查数据的第一步永远是查看crs。第二个误区是“底图和数据只要坐标系相同就万事大吉”。虽然WGS84和Web Mercator在大多数地方看起来差不多但长度和面积变形依然存在。做专题分析时面积计算和密度计算必须在投影坐标下进行否则结果会有偏差做展示底图时则优先用Web Mercator和其他底图完整贴合。第三个误区是“投影转换都是自动完成的”。QGIS里有“临时坐标转换”和“永久坐标转换”两个概念如果你只在图层列表里右键选择“设置CRS”没有把数据真正重新投影后续导出的时候还是会按原坐标输出。正确做法是用“矢量通用→重投影图层”工具生成一个真正带新坐标系的新图层。4.2 中文字体渲染乱象前文提到过中文字体实际操作时遇到的问题比预想更多。除了matplotlib乱码QGIS在特定操作系统下也可能出现某些中文注记不显示或变成空心方块的情况。这个问题通常有三个层面的原因系统缺少中文字体包、GIS软件默认字体不含中文字符集、导出时字体没有被完整嵌入。解决方案依次对应先安装思源黑体或Noto Sans CJK然后在QGIS的图层标注设置里手动指定字体不要使用“默认”导出PDF时在输出选项中勾选嵌入字体。这样处理之后绝大多数乱码问题都能解决。最后还有一个容易被忽略的点如果图片要发布到网页或社交媒体建议把文字转成轮廓或直接导出为高清PNG。因为有些平台会压缩图片如果字体依赖不全缩略图阶段就看不到字了。我的经验是最小字号不要小于12磅线条宽度不要低于0.5像素这样压缩后还能保持可读性。4.3 配色和版式从“能看”到“好看”珍贵的避坑经验大部分集中在配色上。刚开始我特别喜欢用高饱和度的颜色恨不得每个县都染成不同颜色结果整张地图看起来像调色盘打翻了。后来我用了一个相对稳定的配色策略连续型数据用单色渐变比如浅黄到深红分类型数据用一组色相相近但明度不同的颜色面积较大的区域尽量用低饱和度底色重点信息用高饱和度强调色。还有一个很基础但容易犯错的点是红绿色组合。地图阅读者中色弱或色盲人群占比并不低红绿搭配很容易让他们无法区分内容。建议用蓝橙或紫黄这对组合代替红绿视觉冲击力依然在线但兼容性高很多。版式方面我的模板包括左上角放图名右下角放数据来源和制图时间左下角放比例尺比例尺上方可放指北针。标题字号通常是正文的2到3倍统一使用一种非衬线字体。四周留白至少保证20像素空白避免文字被裁切。这套模板看起来简单实际操作下来能让所有作品迅速统一风格形成系列感。4.4 常见问题处理速查表为了方便参考我把30天里最常遇到的技术问题整理成了一张速查表问题现象常见原因快速处理方法地图位置偏移图层或数据CRS不一致先查看各图层CRS统一用“重投影图层”转换到同一坐标系统中文显示为方框缺少中文字体或未指定字体安装思源黑体并在软件内手动指定使用该字体导出图片模糊dpi设置过低或图片被压缩导出时至少选择300dpi必要时先导出PDF底图瓦片加载缓慢网络原因或瓦片地址不稳定使用本地缓存底图或切换可用的底图源把瓦片下载到本地数据太密导致地图混乱数据未做聚合或简化用网格聚合或属性筛选只保留有代表性的要素等值线锯齿感明显DEM分辨率不足更换更高精度的DEM数据或对栅格做平滑处理图例数字显示错乱字段类型被识别为文本检查属性表中该字段的类型转成数值型元素被裁掉地图布局超出画布范围在打印布局中重置范围并打开“导出时自动扩展”选项这张表现在已经成为我给刚入门的朋友准备的地图制作速查手册不少内容都是实操中踩过坑才总结出来的。5. 这30天教会我的三件事挑战结束那天我把30张图拼成长图发在社交平台评论区里不少人问“你用的什么工具数据哪来的能不能教一下”我没有立刻回复因为经过这一个月我发现这些问题背后真正想了解的是如何在有限时间里把一个想法落地成作品。这恰恰是30天地图挑战最大的意义。第一件学会的事是“先完成再完美”。前两周有几次我想做一个非常复杂的图结果调了两小时还在纠结细节。后来我给自己定了一条规矩每天地图必须在晚上11点前发布哪怕效果不完美也必须先出图。这逼着我学会取舍把最关键的信息放在最显眼位置那些装饰性元素能砍就砍。回头看发布出去的图反而比我在本地反复磨蹭的版本更清爽。第二件学会的事是“数据敏感度是练出来的”。前一周找数据要花一两个小时从第三周开始看到主题词就能立刻反应出该去哪个数据源找什么数据大概需要用什么方法清洗。这种能力没法靠听课获得只能靠多做多试。第三件学会的事是关于坚持的节奏感。很多事做不下去不是因为难度大而是因为中途断了。打卡地图不是重点确保每天动脑动手才是。后来我再做任何长期项目都会刻意设计一个“每天可见的输出物”哪怕只是几十行的记录只要保持节奏事情就能慢慢推进。如果你也想试试这类长期创作挑战我的建议是从一个自己最熟悉的城市和主题入手比如“本地美食地图”“校园树龄分布”“通勤路线热力”。选定一个数据源和一个工具先连续做7天感受一下节奏。30天听起来很长但当你走到第10天的时候大脑会自动进入状态。到时候你会发现最难的不是做地图而是停下来。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。