Matplotlib 多边形补丁未使用来自 pandas df 的 xy 列表进行绘图
Matplotlib polygon patch not plotting using list of xy's from pandas df
我想绘制一些从图形中数字化的形状,并使用它们对我的数据进行分类(它们在 XY 中绘制),但我遇到了第一个障碍!
我想绘制为形状的“字段”示例如下:
到目前为止,这是我的代码:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
df = pd.read_csv("FieldTest.csv") # the data (80 points)
x, y = df["X"], df["Y"] # x y coordinates
points = np.column_stack((x,y))
poly = Polygon(points, ec='k')
fig,ax = plt.subplots(1)
ax.add_patch(poly)
plt.show()
但是这个 returns 是一个空白图:
最终图形有 10 个这样的多边形,我计划使用 contains_point
函数来评估一个点是否位于多边形内。但这是下一步,一旦我能弄清楚如何首先绘制多边形...
Here's pastebin 上的数据
更新 - simonp2207 解决了这个问题,我按顺序对这些点进行了排序:
您看不到显示的多边形的唯一原因是 matplotlib 似乎没有自动缩放补丁对象的轴。因此,我建议您自己自动缩放坐标轴,例如:
ax.set_xlim(min(x), max(x))
ax.set_ylim(min(y), max(y))
但是,请注意。您的多边形不规则,因为提供给多边形 class 的点的顺序是按 x-coordinate 排序的。在凸多边形的情况下,您可以根据点与多边形中心坐标的角度对点进行排序,以便从顶点到顶点的路径在多边形周围形成整齐的边界。然而,在 non-convex 多边形中,我不完全确定这是否成立!
我想绘制一些从图形中数字化的形状,并使用它们对我的数据进行分类(它们在 XY 中绘制),但我遇到了第一个障碍!
我想绘制为形状的“字段”示例如下:
到目前为止,这是我的代码:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
df = pd.read_csv("FieldTest.csv") # the data (80 points)
x, y = df["X"], df["Y"] # x y coordinates
points = np.column_stack((x,y))
poly = Polygon(points, ec='k')
fig,ax = plt.subplots(1)
ax.add_patch(poly)
plt.show()
但是这个 returns 是一个空白图:
最终图形有 10 个这样的多边形,我计划使用 contains_point
函数来评估一个点是否位于多边形内。但这是下一步,一旦我能弄清楚如何首先绘制多边形...
Here's pastebin 上的数据
更新 - simonp2207 解决了这个问题,我按顺序对这些点进行了排序:
您看不到显示的多边形的唯一原因是 matplotlib 似乎没有自动缩放补丁对象的轴。因此,我建议您自己自动缩放坐标轴,例如:
ax.set_xlim(min(x), max(x))
ax.set_ylim(min(y), max(y))
但是,请注意。您的多边形不规则,因为提供给多边形 class 的点的顺序是按 x-coordinate 排序的。在凸多边形的情况下,您可以根据点与多边形中心坐标的角度对点进行排序,以便从顶点到顶点的路径在多边形周围形成整齐的边界。然而,在 non-convex 多边形中,我不完全确定这是否成立!