python matplotlib绘制数学曲线
配套B站视频 https://www.bilibili.com/video/av83962883/
一.绘图实现三步
简单实现绘图
# 1.导包
import numpy as np
import matplotlib.pyplot as plt
#2.数据
x = np.linspace(-np.pi, np.pi, 1000)
y_sin = np.sin(x)
#3.绘图
plt.plot(x, y_sin)
plt.show()
二.图形元素设置
三大步,七小步绘制完整图形
#1.导包
import numpy as np
import matplotlib.pyplot as plt
#2.数据
x = np.linspace(-np.pi, np.pi, 1000,)
y_sin = np.sin(x)
#3.绘图
#3.3设置画布尺寸
plt.figure(figsize=(10,5),dpi=70) #设置尺寸
#3.1绘制曲线
plt.plot(x, y_sin,linestyle="-",color="blue",linewidth=2, label="$sin(x)$") #linestyle->ls,color->c,linewidth->lw
#3.4标题设置
plt.xlabel("X") #x轴标题
plt.ylabel("Y") #y轴标题
plt.title("Sin(x)-function") #图标题
#3.5轴设置
plt.xlim((-3.5,3.5)) #设置x轴范围 注意将数据放在元组里
plt.xticks(np.linspace(-3.5,3.5,7))# 将-3.5,3.5区间,用7根线分成6份
plt.ylim((-1.2,1.2)) #设置y轴范围
plt.yticks(np.linspace(-1,1,5)) #y轴区间 分成4份
# 3.6网格
plt.grid(True,which='major', c='gray', ls='-.', lw=1, alpha=0.2)
#3.7显示标签
plt.legend(loc="upper left")
#3.2 展示
plt.show()
三.刻度及轴位置设置
1.轴放在 0,0 位置
2.x轴刻度 变成 π的形式
#1.导包
import numpy as np
import matplotlib.pyplot as plt
#2.数据
x = np.linspace(-np.pi, np.pi, 1000,)
y_sin = np.sin(x)
#3.绘图
#3.3设置画布尺寸
plt.figure(figsize=(10,5),dpi=70) #设置尺寸
#3.1绘制曲线
plt.plot(x, y_sin,linestyle="-",color="blue",linewidth=2, label="$sin(x)$") #linestyle->ls,color->c,linewidth->lw
#3.4标题设置
# plt.xlabel("X") #x轴标题
# plt.ylabel("Y") #y轴标题
plt.title("Sin(x)-function") #图标题
#3.5轴设置
#3.5.1 轴位置 **
ax = plt.gca() #获取轴对象
ax.xaxis.set_ticks_position("bottom") #x轴线,设置刻度线位置,此处设置刻度线在spine中的bottom线
ax.yaxis.set_ticks_position("left") #y轴线,设置刻度线位置,此处设置刻度线在spine中的bottom线
ax.spines["bottom"].set_position(("data",0)) #将bottom线的位置设置为数据为0的位置
ax.spines["left"].set_position(("data",0)) #将left线的位置设置为数据为0的位置
ax.spines["top"].set_color("none") #将top线的颜色设置为无
ax.spines["right"].set_color("none") #将right线的颜色设置为无
#3.5.2轴刻度
plt.xlim((-3.5,3.5)) #设置x轴范围 注意将数据放在元组里
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"$-\pi$",r"$-\pi/2$",r"$0$",r"$\pi/2$",r"$\pi$"])#*改成π值*
plt.ylim((-1.2,1.2)) #设置y轴范围
plt.yticks(np.linspace(-1,1,9)) #y轴区间 分成4份 #*改成8份*
# 3.6网格
plt.grid(True,which='major', c='gray', ls='-.', lw=1, alpha=0.2)
#3.7显示标签
plt.legend(loc="upper left")
#3.2 展示
plt.show()
四.创建有箭头新轴 图形
1.创建新轴
2.添加箭头
3.显示中文字符
#1.导包
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#2.数据
x = np.linspace(-np.pi, np.pi, 1000,)
y_sin = np.sin(x)
#3.绘图
#3.1设置画布尺寸
fig=plt.figure(figsize=(10,5)) #设置尺寸 ***
#3.2轴设置
#3.2.1 轴位置 **
ax = axisartist.Subplot(fig, 111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax)#将绘图区对象添加到画布中
ax.axis[:].set_visible(False)#通过set_visible方法设置绘图区所有坐标轴隐藏
ax.axis["x"] = ax.new_floating_axis(0,0)#ax.new_floating_axis代表添加新的坐标轴
ax.axis["x"].set_axisline_style("->", size = 1.0)#给x坐标轴加上箭头
ax.axis["y"] = ax.new_floating_axis(1,0)#添加y坐标轴,且加上箭头
ax.axis["y"].set_axisline_style("-|>", size = 1.0) #实体箭头
ax.axis["x"].set_axis_direction("top")#设置x、y轴上刻度显示方向
ax.axis["y"].set_axis_direction("left")
#3.2.2轴刻度
plt.xlim((-3.5,3.5)) #设置x轴范围 注意将数据放在元组里
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"$-\pi$",r"$-\pi/2$",r"$0$",r"$\pi/2$",r"$\pi$"])#*改成π值*
plt.ylim((-1.2,1.2)) #设置y轴范围
plt.yticks(np.linspace(-1,1,5)) #y轴区间 分成4份
# 3.3网格
plt.grid(True,which="major", color="gray", linestyle="--", linewidth=1, alpha=0.2)
#3.4绘制曲线
plt.plot(x, y_sin,linestyle="-",color="blue",linewidth=2, label="$sin(x)$") #linestyle->ls,color->c,linewidth->lw
# 3.5标题设置
# plt.xlabel("X") #x轴标题 ** ***
# plt.ylabel("Y") #y轴标题 ** ***
# plt.title("Sin(x)-function") #图标题
plt.title("Sin(x)-正弦函数") #图标题
#3.6显示标签
plt.legend(loc="upper left")
#3.7 展示
plt.show()
五.对所绘制的曲线优化
1.绘制标注点
2.绘制标注线
3.写注释文本
#1.导包
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#2.数据
x = np.linspace(-np.pi, np.pi, 1000,)
y_sin = np.sin(x)
#3.绘图
#3.1设置画布尺寸
fig=plt.figure(figsize=(10,5)) #设置尺寸 ***
#3.2轴设置
#3.2.1 轴位置 **
ax = axisartist.Subplot(fig, 111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax)#将绘图区对象添加到画布中
ax.axis[:].set_visible(False)#通过set_visible方法设置绘图区所有坐标轴隐藏
ax.axis["x"] = ax.new_floating_axis(0,0)#ax.new_floating_axis代表添加新的坐标轴
ax.axis["x"].set_axisline_style("->", size = 1.0)#给x坐标轴加上箭头
ax.axis["y"] = ax.new_floating_axis(1,0)#添加y坐标轴,且加上箭头
ax.axis["y"].set_axisline_style("-|>", size = 1.0) #实体箭头
ax.axis["x"].set_axis_direction("top")#设置x、y轴上刻度显示方向
ax.axis["y"].set_axis_direction("left")
#3.2.2轴刻度
plt.xlim((-3.5,3.5)) #设置x轴范围 注意将数据放在元组里
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"$-\pi$",r"$-\pi/2$",r"$0$",r"$\pi/2$",r"$\pi$"])#*改成π值*
plt.ylim((-1.2,1.2)) #设置y轴范围
plt.yticks(np.linspace(-1,1,5)) #y轴区间 分成4份
# 3.3网格
plt.grid(True,which="major", color="gray", linestyle="--", linewidth=1, alpha=0.2)
#3.4绘制曲线
#3.4.1绘制曲线
plt.plot(x, y_sin,linestyle="-",color="blue",linewidth=2, label="$sin(x)$") #正弦函数
#3.4.2标注
t = np.pi/3
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
plt.plot([0,t],[np.sin(t),np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
plt.scatter(t,np.sin(t), 50, color ='red')
plt.annotate(r'$\sin(\frac{\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="-|>", connectionstyle="arc3,rad=0.6"))
# 3.5标题设置
# plt.xlabel("X") #x轴标题 ** ***
# plt.ylabel("Y") #y轴标题 ** ***
# plt.title("Sin(x)-function") #图标题
plt.title("Sin(x)-正弦函数") #图标题
#3.6显示标签
plt.legend(loc="upper left")
#3.7 展示
plt.show()
六.八函数同图
1.二元一次方程组
2.二次方函数
3.正弦函数
4.余弦函数
5.三次方函数
6.指数函数
7.对数函数
8.sigmoid函数
#1.导包
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#2.数据
x = np.linspace(-np.pi, np.pi, 1000,)
y_sin = np.sin(x)
y_cos = np.cos(x)
y=1/2*x
y_2=x**2
y_3=x**3
y_2x=2**x
y_ln=np.log(x)
y_sigmoid=1/(1+np.exp(-x))
#3.绘图
#3.1设置画布尺寸
fig=plt.figure(figsize=(10,5)) #设置尺寸 ***
#3.2轴设置
#3.2.1 轴位置 **
ax = axisartist.Subplot(fig, 111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax)#将绘图区对象添加到画布中
ax.axis[:].set_visible(False)#通过set_visible方法设置绘图区所有坐标轴隐藏
ax.axis["x"] = ax.new_floating_axis(0,0)#ax.new_floating_axis代表添加新的坐标轴
ax.axis["x"].set_axisline_style("->", size = 1.0)#给x坐标轴加上箭头
ax.axis["y"] = ax.new_floating_axis(1,0)#添加y坐标轴,且加上箭头
ax.axis["y"].set_axisline_style("-|>", size = 1.0) #实体箭头
ax.axis["x"].set_axis_direction("top")#设置x、y轴上刻度显示方向
ax.axis["y"].set_axis_direction("left")
#3.2.2轴刻度
plt.xlim((-3.5,3.5)) #设置x轴范围 注意将数据放在元组里
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r"$-\pi$",r"$-\pi/2$",r"$0$",r"$\pi/2$",r"$\pi$"])#*改成π值*
plt.ylim((-1.2,1.2)) #设置y轴范围
plt.yticks(np.linspace(-1,1,5)) #y轴区间 分成4份
# 3.3网格
plt.grid(True,which="major", color="gray", linestyle="--", linewidth=1, alpha=0.2)
#3.4绘制曲线
#3.4.1 绘制曲线
plt.plot(x, y,linestyle="-",color="black",linewidth=2, label="$y=0.5x$") #一元一次函数
plt.plot(x, y_2,linestyle="-",color="orange",linewidth=2, label="$y=x^2$") #二次方函数
plt.plot(x, y_3,linestyle="-",color="purple",linewidth=2, label="$y=x^3$") #三次方函数
plt.plot(x, y_2x,linestyle="-",color="green",linewidth=2, label="$y=2^x$") #指数函数
plt.plot(x, y_ln,linestyle="-",color="yellow",linewidth=2, label="$y=ln(x)$") #对数函数
plt.plot(x, y_sigmoid,linestyle="-",color="purple",linewidth=2, label="$sigmoid$") #sigmoid函数
plt.plot(x, y_sin,linestyle="-",color="blue",linewidth=2, label="$sin(x)$") #正弦函数
plt.plot(x, y_cos,linestyle="-",color="red",linewidth=2, label="$cos(x)$") #余弦函数
#3.4.2标注
# t = np.pi/3
# plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
# plt.plot([0,t],[np.sin(t),np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
# plt.scatter(t,np.sin(t), 50, color ='red')
# plt.annotate(r'$\sin(\frac{\pi}{3})=\frac{\sqrt{3}}{2}$',
# xy=(t, np.sin(t)), xycoords='data',
# xytext=(+10, +30), textcoords='offset points', fontsize=16,
# arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.6"))
# 3.5标题设置
# plt.xlabel("X") #x轴标题 ** ***
# plt.ylabel("Y") #y轴标题 ** ***
# plt.title("Sin(x)-function") #图标题
plt.title("八函数同图") #图标题
#3.6显示标签
plt.legend(loc="upper left")
#3.7 展示
plt.show()
一些官方文档参考资料
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.grid.html?highlight=grid#matplotlib.pyplot.grid
https://matplotlib.org/api/spines_api.html?highlight=spines#matplotlib.spines.Spine.set_position
5.plt.annotate 注释
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.annotate.html?highlight=annotate#matplotlib.pyplot.annotate
https://matplotlib.org/gallery/userdemo/connectionstyle_demo.html?highlight=connectionstyle
6.散点图
https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.scatter.html?highlight=scatter#matplotlib.axes.Axes.scatter