一、Matplotlib基础知识
Matplotlib中的基本图表包括的元素
- x轴和y轴 axis 水平和垂直的轴线
- 轴标签 axisLabel 水平和垂直的轴标签
- x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括最小刻度和最大刻度
- x轴和y轴刻度标签 tick label 表示特定坐标轴的值
- 绘图区域(坐标系) axes 实际绘图的区域
- 画布 figure 呈现所有的坐标系
只含单一曲线的图
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
x = np.linspace(0,10,100)#等差数列
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) + np.cos(x)
plt.plot(x,y1,x,y2,x,y3)
plt.grid(b=True)#显示网格
设置子画布
axes = plt.subplot()
axes1 = plt.subplot(233)#这里(233)表示(2,3,3)即两行三列第三个位置
axes1.plot(x,y1)
axes1.grid(lw=2.0,alpha=0.2,color='red',axis='y')
axes2 = plt.subplot(2,3,1)#也可以(231)
axes2.plot(x,y2)
axes3 = plt.subplot(232)
axes3.plot(x,y3)
axes4 = plt.subplot(236)
axes4.plot(x,y3)
网格线
绘制正弦余弦
使用plt.grid方法可以开启网格线,使用plt面向对象的方法,创建多个子图显示不同网格线
- lw代表linewidth,线的粗细
- alpha表示线的明暗程度
- color代表颜色
- axis显示轴向

x = np.linspace(0,10,10)
y = np.cos(x) + np.sin(x)
plt.plot(x,y,ls='steps')
plt.axis([-5,10,-2,2])
plt.xlabel("this is X")
plt.ylabel("this is Y")
# simhei
plt.rcParams['font.sans-serif'] = ['simhei']
plt.rcParams['axes.unicode_minus'] = False
plt.title("标题,color='red',
loc = 'left' ,
)
坐标轴标签
xlabel方法和ylabel方法
plt.ylabel('y = x^2 + 5',rotation = 60)旋转
- color 标签颜色
- fontsize 字体大小
- rotation 旋转角度
标题
plt.title()方法
- loc {left,center,right}
- color 标签颜色
- fontsize 字体大小
- rotation 旋转角度
legend方法
两种传参方法:
- 分别在plot函数中增加label参数,再调用legend()方法显示
- 直接在legend方法中传入字符串列表

loc参数可以是2元素的元组,表示图例左下角的坐标
- [0,0] 左下
- [0,1] 左上
- [1,0] 右下
- [1,1] 右上
图例也可以超过图的界限loc = (-0.1,0.9)
保存图片
使用figure对象的savefig的函数
- filename
含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG (“png”、“pdf”、“svg”、“ps”、“eps”……) - dpi
图像分辨率(每英寸点数),默认为100 - facecolor
图像的背景色,默认为“w”(白色)
.png和.jpg这两张图片有什么实质性的不同
点和线的样式
颜色
参数color或c
颜色值的方式
- 别名
- color='r'
- 合法的HTML颜色名
- color = 'red'
- HTML十六进制字符串
- color = '#eeefff'
- 归一化到[0, 1]的RGB元组
- color = (0.3, 0.3, 0.4)
- jpg png 区别?
X、Y轴坐标刻度
plt.xticks()和plt.yticks()方法
- 需指定刻度值和刻度名称 plt.xticks([刻度列表],[名称列表])
- 支持fontsize、rotation、color等参数设置
x = np.linspace(0,20,20)
y = np.sin(x)
plt.plot(x,y)
plt.xticks(np.arange(0,20,5), ('0', 'π/2', 'π', '2π'))
plt.yticks(np.arange(0,20,5), ('0', 'π/2', 'π', '2π'))
三、2D图形
直方图
【直方图的参数只有一个x!!!不像条形图需要传入x,y】
hist()的参数
- bins
可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10 - normed
如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False - color
指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色 - orientation
通过设置orientation为horizontal创建水平直方图。默认值为vertical
x = np.random.normal(0,1,100)
plt.hist(x,normed=True,color='g',orientation='vertical')
条形图
【条形图有两个参数x,y】
- width 纵向设置条形宽度
- height 横向设置条形高度
bar()、barh()
# 第一个随机数就是X轴向的数据
# 第二个随机数就是Y轴向的数据
x = np.random.randint(0,100,size=100)
y = np.random.randint(0,100,size=100)
plt.bar(x,y,1)
plt.barh(x,y,0.25)
饼图
【饼图也只有一个参数x!】
饼图阴影、分裂等属性设置
- labels参数设置每一块的标签;
- labeldistance参数设置标签距离圆心的距离(比例值,只能设置一个浮点小数)
- autopct参数设置比例值的显示格式(%1.1f%%);
- pctdistance参数设置比例值文字距离圆心的距离
- explode参数设置每一块顶点距圆形的长度(比例值,列表);
- colors参数设置每一块的颜色(列表);
- shadow参数为布尔值,设置是否绘制阴影
- startangle参数设置饼图起始角度
pie()
饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小
#普通各部分占满饼图
x = np.array([1,2,3])
plt.pie(x)

x = np.array([0.5,0.3])
plt.pie(x,labels=['one','two'],labeldistance=0.8,autopct="%1.2f%%",explode=[0.05,0.05],colors=["black","blue"],shadow=True,startangle=90)
普通各部分占满饼图
散点图
【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】
scatter()
x = np.random.randint(0,100,size=1000)
y = np.random.randint(0,100,size=1000)
plt.scatter(x,y)

控制文字属性的方法:

x = np.random.randint(0,100,10)
x[1] = 200
plt.plot(x)
# plt.text(2.5,210,"first",bbox=dict(facecolor='red', alpha=0.5))
plt.annotate(xy=(1.8,200),s="first",xytext=(2.8,210),arrowprops={"arrowstyle":'fancy'})
注释
annotate()
- xy参数设置箭头指示的位置
- xytext参数设置注释文字的位置
- arrowprops参数以字典的形式设置箭头的样式
- width参数设置箭头长方形部分的宽度
- headlength参数设置箭头尖端的长度,
- headwidth参数设置箭头尖端底部的宽度
- 、shrink参数设置箭头顶点、尾部与指示点注释文字的距离(比例值),可以理解为控制箭头的长度
五、3D图
导包
- from mpl_toolkits.mplot3d.axes3d import Axes3D
使用mershgrid函数切割x,y轴
- X,Y = np.meshgrid(x, y)
创建3d坐标系
- axes = plt.subplot(projection='3d')
绘制3d图形
- p = axes.plot_surface(X,Y,Z,color='red',cmap='summer',rstride=5,cstride=5)
添加colorbar
- plt.colorbar(p,shrink=0.5)
x = np.linspace(-np.pi,np.pi,100)
y = np.linspace(-np.pi,np.pi,100)
X,Y=np.meshgrid(x, y)#切割
Z=np.sin(X) + np.cos(Y)
plt.figure(figsize=(12,8))#放大显示
axes=plt.subplot(projection='3d')
p = axes.plot_surface(X,Y,Z,color='red',cmap='summer',rstride=5,cstride=5)
plt.colorbar(p,shrink=0.5)
创建极坐标,设置polar属性
- plt.axes(polar = True)
绘制极坐标条形图
- index = np.arange(-np.pi,np.pi,2*np.pi/6)
- plt.bar(x=index ,height = [1,2,3,4,5,6] ,width = 2*np.pi/6)
plt.axes(polar = True)
index = np.arange(-np.pi,np.pi,2*np.pi/6)
plt.bar(x=index ,height = [1,2,3,4,5,6] ,width = 2*np.pi/6)
