将行坐标数据转换为元组列表实现DataFrame多形状轮廓同图绘制
形状轮廓批量绘制方案
前置假设
默认你的DataFrame坐标列命名规则为x1, y1, x2, y2 ... x10, y10,如果你的列名规则不同,只需调整后续代码中的坐标提取逻辑即可。
你需要的最终效果可参考下图:
基础实现方案(仅依赖pandas+matplotlib)
无需安装额外第三方库,直接遍历每行数据生成轮廓绘制即可:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.patches import Polygon # 1. 创建画布和坐标轴 fig, ax = plt.subplots(figsize=(8, 8)) # 设置坐标轴等比例,避免形状被拉伸 ax.set_aspect('equal') # 2. 遍历每行数据绘制轮廓 for _, row in df.iterrows(): # 提取10组坐标点 coords = [] for i in range(1, 11): coords.append((row[f'x{i}'], row[f'y{i}'])) # 追加第一个坐标点实现轮廓闭合 coords.append(coords[0]) # 创建多边形轮廓,可自定义样式参数 poly = Polygon( coords, closed=True, edgecolor='black', # 轮廓颜色 facecolor='none', # 不填充内部,仅绘制轮廓 linewidth=1 # 轮廓线宽 ) ax.add_patch(poly) # 3. 自动适配坐标轴范围并显示 ax.autoscale() plt.show()
更优方案(基于geopandas,适合大量数据场景)
如果你的数据量较大,或者后续需要对形状做空间计算,推荐用geopandas实现,代码更简洁,绘制性能更高:
import pandas as pd import matplotlib.pyplot as plt import geopandas as gpd from shapely.geometry import Polygon # 1. 定义行转多边形的函数 def row_to_shape(row): coords = [(row[f'x{i}'], row[f'y{i}']) for i in range(1, 11)] return Polygon(coords) # 2. 生成GeoDataFrame gdf = gpd.GeoDataFrame( df, geometry=df.apply(row_to_shape, axis=1) ) # 3. 一次性批量绘制所有轮廓 ax = gdf.plot( edgecolor='black', facecolor='none', linewidth=1, figsize=(8,8) ) ax.set_aspect('equal') plt.show()
自定义调整说明
- 如果需要区分不同形状,可以在绘制时根据行内的分类字段给每个轮廓设置不同的
edgecolor - 如果坐标点存储顺序不是闭合顺序,只需调整
coords列表的拼接逻辑即可 - 如果不需要闭合轮廓,删除追加首坐标的代码,并把
Polygon换成LineCollection即可
内容的提问来源于stack exchange,提问作者Lauren Kirsch
相关产品推荐
相关产品推荐

