Graphing a Parabola using Matplotlib in Python

2020-07-08 00:07发布

问题:

I am trying to graph a simple parabola in matplotlib and I am confused as to how I am supposed to plot points on the parabola. So far, this is what I have:

import matplotlib.pyplot as plt
a=[]
b=[]
y=0
x=-50
while x in range(-50,50,1):
    y=x^2+2*x+2
    a=[x]
    b=[y]
    fig= plt.figure()
    axes=fig.add_subplot(111)
    axes.plot(a,b)
    plt.show()
    x= x+1

回答1:

This should do:

import matplotlib.pyplot as plt
import numpy as np

# create 1000 equally spaced points between -10 and 10
x = np.linspace(-10, 10, 1000)

# calculate the y value for each element of the x vector
y = x**2 + 2*x + 2  

fig, ax = plt.subplots()
ax.plot(x, y)



回答2:

This is your approach with as few changes as possible to make it work (because it's clear that you're a beginner and this is a learning exercise). The changes I made were:

  1. Moved the plt.figure, and other plotting statements out of the loop. The loop now gives you the data to plot, and then you plot it once the loop is finished.

  2. Changed x^2 to x**2.

  3. Changed while to for in your main loop control statement.

  4. Commented out a few lines that weren't doing anything. They all had the same source of error (or non-utility, really): in the for loop, x is set in the loop control line and then y is calculated directly, so you don't need to give them initial values or increment x, though you would have had to do these steps for a while loop.

Here the code:

import matplotlib.pyplot as plt

a=[]
b=[]
# y=0
# x=-50

for x in range(-50,50,1):
    y=x**2+2*x+2
    a.append(x)
    b.append(y)
    #x= x+1

fig= plt.figure()
axes=fig.add_subplot(111)
axes.plot(a,b)
plt.show()


回答3:

Adjust your third to last line to:

axes.plot(a,b, 'r-^')

Adding the 'r-^' will add red triangular points to the graph. Alternatively, you can use 'b-o'.

Note: You should include the quotes.

For different colors you can use 'b' - blue; 'g' - green; 'r' - red; 'c' - cyan; 'm' - magenta; 'y' - yellow; 'k' - black; 'w' - white

The - in the 'r-^' or 'b-o' will create the line joining the triangles or circles respectively. That is, without the dash, you will end up with a scatter plot.

Alternatively, there is command ....scatter(x,y) which would be equivalent to 'r ^' and 'b o'