第8节,绘制函数曲线

使用matplotlib绘制函数曲线,需要完成以下事项:

  1. 确定函数
  2. 生成x轴数据,并根据x轴数据生成y轴数据
  3. 确定x轴和y轴的范围

接下来,我以 y = a*x + b 来示范如何绘制函数曲线

第一步,确定函数

函数y = a*x + b, 太easy了,初衷数学课上学习的,在平面上它是一条执行,b是截距, a 和 b是常数,假设a = 3, b = 4, 函数y = 3x + b,是不是很熟悉

第二步,生成x轴数据,并根据x轴数据生成y轴数据

生成数据使用numpy模块

import matplotlib
import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(-3, 3, 100)     # 从-3 到 3 在这个范围内生成100数
y = x*3 + 4

linspace方法生成的数据是均匀分布的,这样才能保证画出连接在一起的曲线。

第三步,确定x轴和y轴的范围

x轴的范围可以根据第二步中的x轴数据来确定,y轴数据则应当根据函数大致估算出合理范围

plt.xlim(-4, 4)
plt.ylim(-10, 10)

第四步,设置x,y轴的刻度

plt.xticks(np.linspace(-4, 4, 5))
plt.yticks(np.linspace(-10, 10, 5))

进行到这里,不妨试运行一下程序

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(-3, 3, 50)     # 从-3 到 3 在这个范围内生成50数
y = x*3 + 4

plt.plot(x, y, color='green', linewidth=1.0, linestyle='--')
plt.title('y=3x + 4')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(-4, 4)
plt.ylim(-10, 10)

plt.xticks(np.linspace(-4, 4, 5))
plt.yticks(np.linspace(-10, 10, 5))
plt.show()

结果如下图

这和我们所熟悉的平面坐标系很不一样,我们需要去掉上边和右边的两条线,同时将左侧和底部的线进行移动,构成平面直角坐标系。

第5步,构造平面直角坐标系

分为4个步骤:

  1. 获取坐标轴信息
  2. 将顶部和右侧的线隐藏
  3. 移动x轴
  4. 移动y轴
ax = plt.gca()
ax.spines['right'].set_color('none')        # 设置颜色为none ,就看不见了
ax.spines['top'].set_color('none')
# 移动x轴
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
# 移动y轴
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

plt.show()

最终呈现效果

画一条执行没什么难度,我决定画一下sin曲线试试

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, np.pi*2, 50)     # 从-3 到 3 在这个范围内生成50数
y = np.sin(x)

plt.plot(x, y, color='green', linewidth=1.0, linestyle='--')
plt.title('sin')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0, np.pi*2)
plt.ylim(-1, 1)

plt.xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi], ['0', 'π/2', 'π','3π/2','2π'])
plt.yticks(np.linspace(-1, 1, 5))

ax = plt.gca()
ax.spines['right'].set_color('none')        # 设置颜色为none ,就看不见了
ax.spines['top'].set_color('none')
# 移动x轴
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
# 移动y轴
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))

plt.show()

最终呈现效果

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案