首页 > 解决方案 > 将等高线从一个图形投影到另一个图形

问题描述

我想将轮廓线从一个图形投影到另一个图形(使用相同的 x,y 参考系统)。我希望将其投影到第二个图中的曲面图上,而不是固定平面上。

更新:有一个解决方法;通过使用该contour.allsegs命令,您可以获得包含轮廓线的 x,y 坐标的数组列表,然后您可以使用它来预处理第二个图形的数​​据。

但是:这只有效,因为我知道第二个表面的数学表示。这意味着我可以根据公式使用第一位数轮廓线的 x,y 值简单地计算 z 值。

import numpy as np
import matplotlib.pyplot as plt

X,Y = np.meshgrid(np.arange(0,5,1/5), np.arange(0,5,1/5))
Z1 = np.sin(X)+np.cos(Y)
Z2 = X+Y

fig = plt.figure(figsize=plt.figaspect(0.5))

ax1 = fig.add_subplot(1, 2, 1, projection='3d',title='fig1')
surf1 = ax1.plot_surface(X, Y, Z1, alpha=0.2)
contour1 = ax1.contour(X, Y, Z1)

segs=contour1.allsegs

ax2 = fig.add_subplot(1, 2, 2, projection='3d',title='fig2')
surf2 = ax2.plot_surface(X, Y, Z2, alpha=0.2)

for i in range(len(segs)):
    if segs[i]:
        plt.plot(segs[i][0][:,0],segs[i][0][:,1],[x+y for x,y in zip(segs[i][0][:,0],segs[i][0][:,1])])
        if len(segs[i]) >= 2:
            plt.plot(segs[i][1][:,0],segs[i][1][:,1],[x+y for x,y in zip(segs[i][1][:,0],segs[i][1][:,1])])

plt.show()

导致:

在此处输入图像描述

非常欢迎任何提示或解决方案的替代方法!

标签: pythonmatplotlibcontour

解决方案


推荐阅读