首页 > 解决方案 > 在 2-D 点与其对应的 3-D 值之间绘制一条线

问题描述

我正在尝试在 3-D Matplotlib 图中绘制虚线。我想在每个 ( x_pt, y_pt) 到其对应的z_pt.

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib
matplotlib.rcParams['mathtext.fontset'] = 'cm'
matplotlib.rcParams['axes.labelsize'] = 13

def z_function(x, y):
    a = 1
    b = 5.1/(4*np.pi**2)
    c = 5/np.pi
    r = 6
    s = 10
    t = 1/(8*np.pi)
    return a*(y - b*x**2 + c*x - r)**2 + s*(1 - t)*np.cos(x) + s

x = np.linspace(-5, 10, 100)
y = np.linspace(0, 15, 100)

indexes = np.random.randint(0, 100, 5)
x_pt = x[indexes]
y_pt = y[indexes]

z_pt = z_function(x_pt, y_pt)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.scatter(x_pt, y_pt, color='k', marker='x', depthshade=False)
ax.scatter(x_pt, y_pt, z_pt, color='k', marker='^', depthshade=False)
ax.set_xticks([-5, 0, 5, 10])
ax.set_yticks([0, 5, 10, 15])
ax.set_zticks([100, 200, 300])
ax.view_init(30, -120)
ax.set_xlabel(r'$x_1$')
ax.set_ylabel(r'$x_2$')
ax.zaxis.set_rotate_label(False) 
ax.set_zlabel(r'$f(x)$', rotation=0)
ax.w_xaxis.pane.fill = False
ax.w_yaxis.pane.fill = False
ax.w_zaxis.pane.fill = False
plt.show()

在此处输入图像描述

谁能帮我这个?

标签: pythonnumpymatplotlib

解决方案


如果我正确理解您的问题,您需要将点 (x,y,0) 连接到 (x,y,z) ,如下所示:

for x_,y_,z_ in zip(x_pt, y_pt, z_pt):
    ax.plot([x_,x_],[y_,y_],[0,z_], '--', c='grey')

在此处输入图像描述


推荐阅读