J'ai

def f(x):
    return (x**2 / 10) - 2 * np.sin(x)


def plot_fn():
    x = np.arange(-10, 10, 0.1)
    fn = f(x)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)

    # Move left y-axis and bottim x-axis to centre, passing through (0,0)
    ax.spines['left'].set_position('center')
    ax.spines['bottom'].set_position('center')

    # Eliminate upper and right axes
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')

    # Show ticks in the left and lower axes only
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')

    plt.plot(x, fn)
    plt.show()

Je veux également tracer quelques points sur le graphique. Par exemple, lorsque x vaut 0, alors y vaut -4,49. Je veux donc tracer une liste de x,y points. Comment puis-je faire cela sur la même parcelle?

0
Shamoon 14 mars 2019 à 17:56

2 réponses

Meilleure réponse

Vous pouvez ajouter les points dans les arguments d'appel de fonction:

def plot_fn(xpoints=None, ypoints=None):
   #...your code before plt.show
   if x is not None:
       ax.plot(x_points , y_points, 'go')
   plt.show()

plot_fn([0], [-4.99])
1
Mstaino 14 mars 2019 à 15:02

Si vous souhaitez pouvoir ajouter les points supplémentaires ultérieurement après avoir tracé la courbe dans la fonction, vous pouvez renvoyer l'occurrence de l'axe à partir de la figure, puis l'utiliser plus tard pour tracer. Le code suivant l'explique

def plot_fn():
    x = np.arange(-10, 10, 0.1)
    fn = f(x)

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)

    # Your spines related code here
    # ........

    ax.plot(x, fn)
    return ax

ax_ = plot_fn()

x_data = [0, 1]
y_data = [-4.49, 3.12]
ax_.scatter(x_data, y_data, c='r')
plt.show()

enter image description here

1
Sheldore 14 mars 2019 à 15:05