【问题标题】:How can I plot the surface of each side of a polygon?如何绘制多边形每一侧的表面?
【发布时间】:2019-06-06 17:18:50
【问题描述】:

我正在尝试绘制从x, y, z 数组生成的多边形的表面

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

print("numpy version: " + np.__version__)

# [x, y, z] coordinates
p1 = [322697.1875, 3663966.5, -30000.0]
p2 = [325054.34375, 3663966.5, -30000.0]
p3 = [325054.34375, 3665679.5, -30000.0]
p4 = [322697.1875, 3665679.5, -30000.0]
p5 = [322697.1875, 3663966.5, -27703.123046875]
p6 = [325054.34375, 3663966.5, -27703.154296875]
p7 = [325054.34375, 3665679.5, -27703.70703125]
p8 = [322697.1875, 3665679.5, -27703.673828125]

points = [p1, p2, p3, p4, p5, p6, p7, p8]

points = np.array(points)
x = points[:, 0]
y = points[:, 1]
z = points[:, 2]
X, Y = np.meshgrid(x, y)

zr = np.tile(z, [8, 1])

fig = plt.figure(figsize=(16,10))
ax = plt.axes(projection = '3d')
ax.plot_surface(X, Y, zr, alpha=0.5)
plt.show()

这是输出

我希望输出将多边形的每一侧显示为阴影。我做错了什么?

【问题讨论】:

  • this question。如果你有一组点,而不是一个函数f(x,y) -> z,它就会变得更加困难,因为有多种方法可以连接这些点。

标签: python python-3.x numpy matplotlib


【解决方案1】:

给你

=^..^=

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# setup data
p0 = [0, 0, 0]
p1 = [1, 1, 1]
p2 = [2, 2, 2]
p3 = [3, 3, 3]
p4 = [4, 4, 4]
p5 = [5, 5, 5]
p6 = [6, 6, 6]
p7 = [7, 7, 7]
p8 = [8, 8, 8]

# create data array
points = [p0, p1, p2, p3, p4, p5, p6, p7, p8]
points = np.array(points)

# get array co-ordinates
x = points[:, 0]
y = points[:, 1]
z = points[:, 2]
# create mesh for X and Y set points
X, Y = np.meshgrid(x, y)
# create 0 surface
Z1 = np.zeros_like(X)
# create 8 surface
Z2 = np.full_like(X, 8)

# plot data
fig = plt.figure(figsize=(16, 10))
ax = fig.gca(projection='3d')
# setup each surface
ax.plot_surface(X, Y, Z1, alpha=0.3)
ax.plot_surface(X, Z1, Y, alpha=0.3)
ax.plot_surface(Z1, X, Y, alpha=0.3)
ax.plot_surface(X, Y, Z2, alpha=0.3)
ax.plot_surface(X, Z2, Y, alpha=0.3)
ax.plot_surface(Z2, X, Y, alpha=0.3)
plt.show()

输出:

【讨论】:

  • 您是否检查过您的答案是否适用于问题中提供的数据?
  • @Sheldore 数据没关系,因为他用 8 个点定义了几乎正确格式化的多边形。
猜你喜欢
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2015-09-30
  • 2011-01-16
  • 2017-10-13
相关资源
最近更新 更多