import matplotlib.pyplot as plt import numpy as np import math def f(x): return math.sin(x) # using 101 steps so I know I get to 0 x = np.linspace(-5,5,101) plt.plot(x,f(x)) plt.show()Error is "TypeError: only length-1 arrays can be converted to Python scalars". What??
Oh that's because this plt.plot() method really takes 2 arrays, the x values and the y values.
The following works better
import matplotlib.pyplot as plt import numpy as np import math def f(x): return math.sin(x) # using 101 steps so I know I get to 0 x = np.linspace(-5,5,101) yv = np.zeros(len(x)) for i in range(len(x)): yv[i] = f(x[i]) plt.plot(x,yv) plt.show()This works a little better but I like axes and grids and properly scaled graph!
Ok after a little researching here we go:
import matplotlib.pyplot as plt import numpy as np import math XMIN, XMAX = -5, 5 YMIN, YMAX = -5, 5 GRIDSIZE = 1 STEPS = 101 def f(x): return math.sin(x) # using odd steps so I know I get to 0 x = np.linspace(XMIN,XMAX,STEPS) plt.axis([XMIN,XMAX,YMIN,YMAX]) plt.title('my graph') yv = np.zeros(len(x)) for i in range(len(x)): yv[i] = f(x[i]) plt.plot(x,yv) # make axes plt.axhline(y=0, color='k') # 'k' means black plt.axvline(x=0, color='k') # gca is get current axes plt.gca().set_aspect('equal') plt.gca().set_xticks(np.arange(XMIN,XMAX,GRIDSIZE)) plt.gca().set_yticks(np.arange(YMIN,YMAX,GRIDSIZE)) plt.grid(True) plt.show()
No comments:
Post a Comment