matplotlib是python的绘图库,主要用来绘制二维平面图。上手容易、简单,在python数据分析中有非常重要的作用。
基本上有两种使用 Matplotlib 的方法:
一、依靠 pyplot 自动创建和管理图形和轴,并使用 pyplot 函数进行绘图。
二、显式创建图形和轴,并在它们上调用方法(即“面向对象 (OO) 样式”)。
本文章节“plt绘图类型”和“pyplot绘图”主要使用第一种方法(直接调用函数的方法)来介绍基础的功能。虽然用第一种调用函数的方法写起来快,但是使用第二种方式功能会更全。我个人一把在用jupyter做数据分析时使用函数的方法直接调用;在做python桌面程序的时候用到matplotlib时会使用第二种方法。
一下为matplotlib官方教程和api文档,强烈建议看完本文章去拿官方的例子练手。
matplotlib官方例子
matplotlib api文档
import matplotlib.pyplot as plt
# 中文支持
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
matplotlib.pyplot是使 matplotlib 像 MATLAB 一样工作的函数集合。调用简单
plt.plot(X,Y)
plt.scatter(X,Y)
plt.bar(X,Y)
plt.pie(data,lables=,autopct='%1.1f%%')
说明:
1.1f
指的是保留1位小数,后面两个%
表示已百分号显示
plt.boxplot(X,Y)
补充一下箱线图一些说明
图来源于:https://www.imooc.com/video/20316 7:03
plt.xlabel() # 设置 x 轴标签
plt.ylabel() # 设置 y 轴标签
plt.title() # 设置标题
plt.xticks()
plt.legend()
plt.show()
# 设置线条宽度
plt.rcParams['lines.linewidth']=1
# 设置线条颜色
plt.rcParams['lines.color']='green'
# 设置线条样式
plt.rcParams['lines.linestytle']='-'
以下重点介绍面向对象绘图方法。此方法可以绘制更加复杂的图片。
前面介绍的只是比较基本的,适用于快速出图。但是我们做数据分析,想的是同时出多张图,所以需要使用figure()来生成一个画板。
fig = plt.figure(figsize=None, dpi=None)
画板添加大标题
fig.suptitle("画板标题")
在画板里还需要有“图纸”来绘画。也可以理解为坐标系,注意跟下面的Axis(坐标轴)要正确区分
快速创建图板和一个子图:
fig, ax = plt.subplots(**fig_kw) # 快速创建子图和图板,可以传入figure对象的参数,如figsize()
ax.plot(......) # 子图上绘画
# 添加子图:
ax = fig.add_subplot(参数1,参数2,参数3)
参数1
和参数2
是用来对画板划分;参数3
指的是 ax
指的是第几部分
例子:ax = fig.add_subplot(2,2,1) # 将画板划分为2*2,ax表示的第一个
# 为子图添加标题:
ax.set_title("标题")
# 添加图例 #可以添加参数
ax.legend() # 要显示图例画的线的名称,需要在ax.plot()中添加参数:label
# 在指定位置添加文本
ax.text(x,y,"str")# x,y的位置是根据坐标轴的数来的,可以通过transform参数更改坐标系
# 网格是否显示
ax.grid(True);# 显示
matplotlib默认支持TeX表达式(可以输入公式)
matplotlib还支持使用注解(annotions)
ax.annotate('local max', xy=(2, 1), xytext=(3, 1.5),arrowprops=dict(facecolor='black', shrink=0.05))
#添加坐标轴标签:
ax.set_xlabel("x标签")
ax.set_ylabel("y标签")
# 改变坐标尺度
ax.set_yscale('log') # 使用log尺度
# 改变坐标点(ticks)值
ax.set_xticks([0,30,60,90], ['zero', 'thirty', 'sixty', 'ninety'])# 第一个参数是坐标,第二个参数是坐标标签.第二个参数可以不用加。
如果想在子图上新添加坐标轴,可以使用ax. twinx()
或者ax. twiny()
或者ax.secondary_xaxis
。其实就是在原子图的基础上又添加了一个子图,不过子图默认只显示坐标轴。这个新添加的子图也可以添加图形,设置图例、标题、刻度等等。
matplotlib绘图绘制图往往需要根据需求设置图形的样式。
颜色:
# 设置折线的颜色
ax.plot(x, y, color='orange', linewidth=2)
# 设置散点图圆点的轮廓颜色和填充颜色
ax.scatter(x, y s=50, facecolor='C0', edgecolor='k');# s表示圆点大小;facecolor表示填充大小;edgecolor表示边缘大小
线宽:
线宽的单位是pt
ax.plot(x, y, linewidth=6)
点形状
ax.plot(x, y, marker="^")
线形状
ax.plot(x, y, linestyle="--")
matplotlib提供一个格式化字符串,可以对点形状、线形状、颜色:marker
fig,ax=plt.subplots(figsize=(10,7))
ax.plot(x, y,"^--r")
我用的工具是jupyter notebook
import numpy as np
import math
# 在-0.4和0.4之间划分10000个等分。
x=np.linspace(-0.4,0.4,10000,endpoint=False) # 范围我取的很小是因为在(-0.5,0.5)之外,函数图像就是一个直线,没必要。范围太大你看上去就跟直线似的。可以自己试试。
y=[]
for i in x:
if i==0:
y.append(0) # 这里要注意分母不能为0,要不然会报 domain 错误;
# 这里我直接让y等于0,因为高数都学过极限:趋近于零时,无穷小乘以有界,为0,
else:
y.append(math.pow(i,2) * math.sin(1/i))
plt.plot(x,y) # 输入x,y坐标
plt.title("f(x) = x^2sin(1/x) ") # 设置标题
plt.show() # 绘画