matplotlib学习笔记(1)
为什么要学matplotlib
python作为当下流行的编程语言之一,他的使用群体十分庞大,应用范围相当宽泛。在慢慢深入学习python的过程中或多或少都接触到大量数据(尤其是机器学习、数据分析等方向),而直接处理这些数据大多是非常困难的尤其是一些高维的数据。而matplotlib作为一个数据可视化工具,可以把这些不直观的数据变成肉眼可以直观感受到的图像,从而帮助开发人员高效的进行开发。
matplotlib基本用法
依赖包
import matplotlib.pyplot as plt
import numpy as np
import math #导入math属于是给自己挖了个坑
画一条直线
plt.figure(num=1)
x = np.linspace(1, -1, 2) # 两点确定一条直线
y = 3*x+5
plt.plot(x, y)
plt.show()
plt.figure()用于新建一个画图窗口,在只需要一个窗口时可以不创建,python会默认创建一个。参数num=n可以给窗口编号。
plt.plot(x, y)建立x,y间的函数关系:y = f(x)
如果plt.plot(y,x)就会得到其反函数的图像x = f(y)
np.linspace()函数原型:
@array_function_dispatch(_linspace_dispatcher) def linspace(
start: Union[ndarray, Iterable, int, float],
stop: Union[ndarray, Iterable, int, float],
num: Optional[int] = 50,
endpoint: Optional[bool] = True,
retstep: Optional[bool] = False,
dtype: Optional[object] = None,
axis: Optional[int] = 0) -> Any
第一个参数start为起始点
第二个参数stop为终止点
第三个num为在start和stop间均匀取点的数量
np.linspace(1, -1, 2)即为在1和-1间取两个点
PS:参数start可以大于也可以小于stop
作图原理
plt.figure(num=2)
x = np.linspace(-5,6,15)
y = x**2
plt.plot(x, y)
plt.show()
通过这个图像我们可以发现它并不平滑,因为他画图的原理是将符合函数对应关系的点连接起来,所以你设置的num参数越大图像就越平滑,而我们在-5到6间只取了15个点导致他的平滑度不够好
线条参数设置
plt.figure(num=3)
x = np.linspace(-5, 6, 100)
y = x**2
plt.plot(x, y, color="red", linestyle='-', linewidth=10)
# 支持的style:'-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
plt.show()
这里我们取了100个点所以他的平滑度很高
plt.plot()除了可以设置函数的对应关系外还可以设置图像的颜色(color="")线的粗细(linewidth="")以及风格(linestyle="") ps:color默认为蓝色,linestyle默认为"-"
设置坐标轴相关参数
x = np.linspace(-10,10,2000)
plt.figure(num=4)
y = x**3
plt.xlim(-5, 6)
plt.ylim(-20, 10)
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()
我们可以通过xlabel方法为x轴命名,这里我们直接命名为"x",当然也可以用其他名字为它命名。ylabel用法与xlabel方法相同。
plt.figure(num=5)
y = np.sin(x)
plt.xticks(np.linspace(-np.pi, np.pi, 4))
plt.plot(x, y)
plt.show()
# 别用math.xxx
在这里如果使用math.sin等math库下的函数就会因为数据类型不匹配而报错
我们有时会遇到需要直观的看到某一特定范围内的数据图像,plt.xticks()可以方便的解决这一问题,需要均匀分布使用np.linspace(),也可以通过np.array([list])来自定义
plt.figure(num=6)
y = np.cos(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.plot(x, y)
plt.show()
我们也可以通过plt.xticks(list_1,list_2)来进行轴上的文本替换
ps:list_1为轴上的原数据,list_2里为需要替换的文本,list_1,list_2中元素为一一对应的关系
plt.figure(num=7)
x = np.linspace(-2,2,100)
y1 = 2*x
y2 = x**2
plt.plot(x, y1)
plt.plot(x, y2, color='red', linestyle='--')
ax = plt.gca() # gca: get current axis
# 隐藏右边框和上边框
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
#设置底边框为x轴
ax.xaxis.set_ticks_position('bottom')
#设置左边框为y轴
ax.yaxis.set_ticks_position('left')
ax.spines["bottom"].set_position(('data',1))
ax.spines["left"].set_position(('data',0))
plt.xlabel('i am x')
plt.ylabel('i am y')
plt.show()
我们可以通过ax.spines["bottom"].set_position(('data',num1))和ax.spines["left"].set_position(('data',num2))来设置x,y轴的位置(交点固定)也可以单独使用ax.spines["bottom"].set_position(('data',num1))或ax.spines["left"].set_position(('data',num2))来设置x或y轴相对与另一轴的位置(交点半固定)