Python绘制带实际尺寸的多边形:寻求可缩放矢量绘图库方案
适合绘制带真实坐标地块的Python矢量绘图库
推荐几个能满足你需求的库,支持精确坐标控制、比例缩放,且生成矢量格式文件(适配建筑图纸场景):
1. PyCairo
PyCairo是轻量型矢量绘图库,支持生成PDF、SVG、PNG等格式,可直接基于真实坐标绘图,再通过缩放参数输出对应比例的图纸。
示例代码(以1/100比例绘制地块):
import cairo # 真实坐标数据(闭合多边形) x = [21065.67, 21063.77, 21079.64, 21081.62, 21065.67] y = [19803.76, 19827.50, 19829.54, 19805.39, 19803.76] scale = 1/100 # 缩放比例1:100 # 创建PDF表面,预留边距避免内容裁切 max_x = max(x) * scale max_y = max(y) * scale surface = cairo.PDFSurface("plot_100.pdf", max_x + 50, max_y + 50) ctx = cairo.Context(surface) # 应用缩放规则 ctx.scale(scale, scale) # 绘制多边形 ctx.move_to(x[0], y[0]) for i in range(1, len(x)): ctx.line_to(x[i], y[i]) ctx.close_path() # 调整线条宽度(反向抵消缩放影响,保证输出后粗细符合预期) ctx.set_source_rgb(0, 0, 0) ctx.set_line_width(0.5 * (1/scale)) ctx.stroke() surface.finish()
2. ReportLab
ReportLab专注于PDF生成,内置适配工程绘图的坐标系统,支持精确缩放,还可添加标注、文字等元素,适合制作完整的建筑图纸文档。
示例代码:
from reportlab.pdfgen import canvas from reportlab.lib.units import mm # 真实坐标与缩放比例 x = [21065.67, 21063.77, 21079.64, 21081.62, 21065.67] y = [19803.76, 19827.50, 19829.54, 19805.39, 19803.76] scale = 1/100 # 1:100比例 # 创建PDF画布,单位设为毫米(工程图常用单位) page_width = max(x)*scale + 10*mm page_height = max(y)*scale + 10*mm c = canvas.Canvas("plot_reportlab.pdf", pagesize=(page_width, page_height)) # 应用缩放 c.scale(scale, scale) # 绘制多边形 c.setStrokeColorRGB(0,0,0) c.setLineWidth(0.5 / scale) c.moveTo(x[0], y[0]) for xi, yi in zip(x[1:], y[1:]): c.lineTo(xi, yi) c.closePath() c.stroke() c.save()
3. SVGwrite
直接生成SVG矢量文件,SVG为纯文本格式,可直接用浏览器、CAD软件打开编辑,缩放时不会失真,适合需要后续二次编辑的场景。
示例代码:
import svgwrite # 真实坐标与缩放比例 x = [21065.67, 21063.77, 21079.64, 21081.62, 21065.67] y = [19803.76, 19827.50, 19829.54, 19805.39, 19803.76] scale = 1/200 # 1:200比例 # 通过viewBox控制整体缩放,添加边距 view_box = (0, 0, max(x)*scale + 50, max(y)*scale + 50) dwg = svgwrite.Drawing("plot.svg", viewBox=f"{view_box[0]} {view_box[1]} {view_box[2]} {view_box[3]}") # 创建多边形路径,使用真实坐标,缩放由viewBox自动处理 polygon = dwg.polygon(points=list(zip(x, y)), stroke='black', fill='none', stroke_width=0.5/(scale)) dwg.add(polygon) dwg.save()
关键注意点
- 缩放时,线条宽度需要反向调整(
线条宽度 = 目标输出宽度 / 缩放比例),避免缩放后线条过细或过粗。 - 生成的PDF/SVG文件可直接导入AutoCAD、SketchUp等建筑类软件,保留精确坐标信息。
内容的提问来源于stack exchange,提问作者user3132616
相关产品推荐
相关产品推荐

