一、Matplotlib基础知识
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。
通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等
它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
1.Matplotlib中的基本图表包括的元素
x轴和y轴 axis
水平和垂直的轴线
x轴和y轴刻度 tick
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
x轴和y轴刻度标签 tick label
表示特定坐标轴的值
绘图区域(坐标系) axes
实际绘图的区域
坐标系标题 title
实际绘图的区域
轴标签 xlabel ylabel
实际绘图的区域
2.hold属性
hold属性默认为True,允许在一幅图中绘制多个曲线;将hold属性修改为False,每一个plot都会覆盖前面的plot。
但是目前不推荐去动hold这个属性,这种做法(会有警告)。因此使用默认设置即可。
3.网格线
grid方法
使用grid方法为图添加网格线
设置grid参数(参数与plot函数相同)
.lw代表linewidth,线的粗细
.alpha表示线的明暗程度
4.axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限
5.xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
6.legend方法
两种传参方法:
【推荐使用】在plot函数中增加label参数
在legend方法中传入字符串列表
7.导入
importnumpy as npimportpandas as pdimportmatplotlib.pyplot as pltfrom pandas importSeries,DataFrame%matplotlib inline"""%matplotlib作用:
1.是在使用jupyter notebook 或者 jupyter qtconsole的时候,才会经常用到%matplotlib,也就是说那一份代码可能就是别人使用jupyter notebook 或者 jupyter qtconsole进行编辑的。
2.而%matplotlib具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像。
3.而我们在spyder或者pycharm实际运行代码的时候,可以直接注释掉这一句,也是可以运行成功的"""
1、包含单条曲线的图
注意:y,x轴的值必须为数字
"""plot() 函数绘制图形。
show()函数显示图形。"""
#1.绘制线性直线#y = 2*x
x=[1,2,3,4,5]
y=[2,4,6,8,10]
plt.plot(x,y)
plt.show()#结果
#y = 2x + 5
x = np.arange(1,11) #x的值
y = 2 * x + 5 #y的值
plt.title("Matplotlib demo") #图的标题
plt.xlabel("x axis caption") #x轴的名称
plt.ylabel("y axis caption") #y轴的名称
plt.plot(x,y) #画图
plt.show() #显示#结果
#2.绘制抛物线
x = np.arange(-np.pi,np.pi,0.5) #np.pi就是数学中的π:3.141596...
y = x**2plt.plot(x,y)
plt.show()#结果
#3.绘制正弦曲线图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True) #从 −π 到 +π 等间隔的 256 个值
y = np.sin(x) #y是这256个值对应的正弦函数值组成的numpy数组,同理绘制余弦y = np.cos(x)
plt.plot(x,y)
plt.show()#结果
2、包含多个曲线的图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)#1.连续调用多次plot函数
plt.plot(x,y)
plt.plot(x+2,y+2)
plt.show()#结果
#2.也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
plt.plot(x,y,x+3,y+3)
plt.show()#结果
3、将多个曲线图绘制在一个table区域中:对象形式创建表图
a=plt.subplot(row,col,loc) 创建曲线图
a.plot(x,y) 绘制曲线图
#一个区域中绘制2行2列,共4个图形#第一幅图:线形图
x = np.arange(0,10,5)
y= 2*x
ax1= plt.subplot(2,2,1) #2行2列这个区域块的第一个位置
ax1.grid()
ax1.plot(x,y)#绘图
#第二幅图:正弦图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)
ax2= plt.subplot(222) #2行2列这个区域块的第二个位置
ax2.plot(x,y) #绘图
#第三幅图:余弦图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.cos(x)
ax3= plt.subplot(223) #2行2列这个区域块的第三个位置
ax3.plot(x,y) #绘图
#第四幅图:抛物线
x = np.arange(-np.pi,np.pi,0.5)
y= x**2ax4= plt.subplot(224) #2行2列这个区域块的第四个位置
ax4.plot(x,y) #绘图
#结果
4、网格线
参数:
- axis
- color:支持十六进制颜色
- linestyle: -- -. :
- alpha
"""网格线 plt.gride(XXX)
grid()常用参数:
b : 布尔值。就是是否显示网格线的意思。官网说如果b设置为None, 且kwargs长度为0,则切换网格状态。
which : 取值为'major', 'minor', 'both'。 默认为'major'。
axis : 取值为‘both’, ‘x’,‘y’。就是想绘制哪个方向的网格线。不过我在输入参数的时候发现如果输入x或y的时候,输入的是哪条轴,则会隐藏哪条轴
color : 这就不用多说了,就是设置网格线的颜色。或者直接用c来代替color也可以。c=r 红色, c=g 绿色 等等
linestyle :也可以用ls来代替linestyle, 设置网格线的风格,是连续实线,虚线或者其它不同的线条。 | '-' | '--' | '-.' | ':' | 'None' | ' ' | '']
linewidth : 设置网格线的宽度"""
#1.绘制一个正弦曲线图,并设置网格
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)
plt.grid(axis='both',c='r')
plt.plot(x,y)#结果
#2.绘制一个两行两列的曲线图阵,并设置网格
x=np.linspace(-np.pi,np.pi,100)
y=np.sin(x)
a1=plt.subplot(221)
a1.grid()
a1.plot(x,y)
a2=plt.subplot(222)
a2.grid()
a2.plot(x,y)
a3=plt.subplot(223)
a3.grid()
a3.plot(x,y)
a4=plt.subplot(224)
a4.grid()
a4.plot(x,y)#结果
5、图形中文显示
Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决:
SimHei.ttf 文件放在当前执行的代码文件中
importnumpy as npfrom matplotlib importpyplot as pltimportmatplotlib#fname 为 你下载的字体库路径,注意 SimHei.ttf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SimHei.ttf")
x= np.arange(1,11)
y= 2 * x + 5plt.title("中文字体 - 测试", fontproperties=zhfont1)#fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x,y)
plt.show()#结果
此外,我们还可以使用系统的字体
from matplotlib importpyplot as pltimportmatplotlib
a=sorted([f.name for f inmatplotlib.font_manager.fontManager.ttflist])for i ina:print(i)
打印出你的 font_manager 的 ttflist 中所有注册的名字,找一个看中文字体例如:STFangsong(仿宋),然后添加以下代码即可
plt.rcParams['font.family']=['STFangsong']
6、向 plot() 函数添加格式字符串来显示离散值
作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值。 可以使用以下格式化字符。
字符描述
'-'
实线样式
'--'
短横线样式
'-.'
点划线样式
':'
虚线样式
'.'
点标记
','
像素标记
'o'
圆标记
'v'
倒三角标记