График нескольких точек - PullRequest
0 голосов
/ 11 июня 2019

У меня есть поверхность matplotlib, мне нужно построить набор точек на этой поверхности. Ниже приведен код, который я должен создать поверхность:

import numpy as np
import matplotlib.pyplot as plt

def graficar(fun):
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    x = y = np.arange(-1.0, 1.0, 0.05)
    X, Y = np.meshgrid(x, y)
    zs = np.array(fun(np.ravel(X), np.ravel(Y)))
    Z = zs.reshape(X.shape) 
    ax.plot_surface(X, Y, Z)
    title='Graficación de la función'
    ax.set_title(title)
    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')
    plt.show()

#funcion x**2 + y**2
def funcion1(x, y):
    return (x)**2 + (y)**2

graficar(funcion1)

На созданной поверхности мне нужно нанести точки, например, (-3, 3), (-2,2), (-1, 1) и т. Д. Эти точки должны отображаться на самой поверхности , так Я думаю, что для этого мне нужно оценить точку на функции, в моем примере (определенном в функции funcion1), если я оцениваю точку (-2, 2), это будет (-2) ** 2 + (2 ) ** 2 = 4 +4 = 8, поэтому точка будет иметь вид x = -2, y = 2, z = 8, и мне нужно, чтобы эта точка отображалась на поверхности

Как я могу это сделать?

1 Ответ

0 голосов
/ 11 июня 2019

Следующий код должен работать для вас:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import get_test_data
# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

def randrange(n, vmin, vmax):
    '''
    Helper function to make an array of random numbers having shape (n, )
    with each number distributed Uniform(vmin, vmax).
    '''
    return (vmax - vmin)*np.random.rand(n) + vmin


def graficar(fun):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection='3d')
    x = y = np.arange(-1.0, 1.0, 0.05)
    X, Y = np.meshgrid(x, y)
    zs = np.array(fun(np.ravel(X), np.ravel(Y)))
    Z = zs.reshape(X.shape)
    ax.plot_surface(X, Y, Z)
    title = 'Graficación de la función'
    ax.set_title(title)
    ax.set_xlabel('X Label')
    ax.set_ylabel('Y Label')
    ax.set_zlabel('Z Label')
    (xs, ys, zs) = ([0, 0.2, 1, 1.2, 0.3],
                    [-0.2, 0.3, 1.8, 0.7, 1.0], [1.0, 0.6, 0.4, 0.9, -0.5])
    ax.scatter(xs, ys, zs, c='r', marker='^')
    plt.show()

# funcion x**2 + y**2


def funcion1(x, y):
    return (x)**2 + (y)**2


graficar(funcion1)

Это даст вам следующий график:

Plot from code

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...