1.Matplotlib相关函数
figure():创建一个新的绘图窗口。
figtext():为figure添加文字
axes():为当前figure添加一个坐标轴
plot():绘图函数
polar():绘制极坐标图
axis():获取或设置轴属性的边界方法(坐标的取值范围)
clf :清除当前figure窗口 cla :清除当前axes窗口
close :关闭当前figure窗口
subplot :一个图中包含多个axes
text():在轴上添加文字
title():设置当前axes标题
xlabel/ylabel:设置当前X轴或Y轴的标签
hist():绘制直方图
hist2d():绘制二维在直方图
hold :设置当前图窗状态;off或者on
imread():读取一个图像,从图形文件中提取数组
legend():为当前axes放置标签
pie():绘制饼状图
scatter():做一个X和Y的散点图,其中X和Y是相同长度的序列对象
stackplot():绘制一个堆叠面积图
acorr():绘制X的自相关函数
annotate():用箭头在指定的数据点创建一个注释或一段文本
bar():绘制垂直条形图
barh():绘制横向条形图
barbs():绘制一个倒钩的二维场
plt.figure:创建一个空白画布,可以指定画布大小,像素。
figure.add_subplot:创建并选中子图,可以指定子图的行数,列数,与选中图片编号。
使用:
import matplotlib.pyplot as pltimport numpy as npdata=np.arange(10)plt.plot(data)

#创建子图import matplotlib.pyplot as pltfig = plt.figure()#不能使用空白的figure绘图,需要创建子图ax1 = fig.add_subplot(2,2,1)ax2 = fig.add_subplot(2,2,2)ax3 = fig.add_subplot(2,2,4)#创建子图.#ax3 = fig.add_subplot(2,2,4) 划分2*2个区域,#最后一个数字表示在哪个区域作图

#子图绘制fig = plt.figure()ax1 = fig.add_subplot(2,2,1)ax2 = fig.add_subplot(2,2,2)ax3 = fig.add_subplot(2,2,3)ax1.plot([1.5,2,3.5,-1,1.6])#表示在第一个区域绘图,#ax1.plot([1.5,2,3.5,-1,1.6]) 只传一组参数的时候。默认为y轴d额数值,x轴默认使用索引

语句Fig , axes = plt.subplots(2,3) 创建一个新的图片,然后返回包含了已生成子图对象的NumPy数组。
数组axes可以像二维数组那样方便地进行索引,如axes[0,1]。也可以通过sharex和sharey表明子图分别拥有相同的x轴和y轴。
使用:
#调整子图周围的间距fig,axes = plt.subplots(2,2,sharex = True,sharey = True)for i in range(2):for j in range(2):axes[i,j].hist(np.random.randn(500),bins =50,color='k',alpha= 0.5)plt.subplots_adjust(wspace=0,hspace=0)

添加画布内容:
import numpy as npimport matplotlib.pyplot as pltdata=np.arange(0,1,0.01)plt.title('my lines example')plt.xlabel('X')plt.ylabel('Y')plt.xlim(0,1)plt.ylim(0,1)plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([0,0.2,0.4,0.6,0.8,1])plt.plot(data,data**2)plt.plot(data,data**3)plt.legend(['y=x^2','y=x^3'])plt.show()

import numpy as npimport matplotlib.pyplot as pltdata=np.arange(0,np.pi*2,0.01)fig1=plt.figure(figsize=(9,7),dpi=90)#确定画布大小ax1=fig1.add_subplot(1,2,1)plt.title('lines example')plt.xlabel('X')plt.ylabel('Y')plt.xlim(0,1)plt.ylim(0,1)plt.xticks([0,0.2,0.4,0.6,0.8,1])plt.yticks([0,0.2,0.4,0.6,0.8,1])plt.plot(data,data**2)plt.plot(data,data**3)plt.legend(['y=x'])plt.show()

plt.title():在当前图形中添加标题
plt.xlabel():在当前图形中添加x轴名称
plt.ylabel():在当前图形中添加y轴名称
plt.xlim():指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.ylim():指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.xticks():指定x轴刻度的数目与取值。
plt.yticks():指定y轴刻度的数目与取值。
plt.legend():指定当前图形的图例,可以指定图例的大小、位置、标签。
添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序
但是添加图例一定要在绘制图形之后
Matplotlib 的 Legend 图例就是为了展示每个数据对应的图像名称,更好的认识数据结构。关于plt.legend():
plt.legend(loc = 'best',frameon = False) #去掉图例边框,推荐使用plt.legend(loc = 'best',edgecolor = 'blue') #设置图例边框颜色plt.legend(loc = 'best',facecolor = 'blue')#设置图例背景颜色,若无边框,参数无效
2.绘图的保存与显示
plt.savafig():保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。plt.show():在本机显示图形。
函数:
plt.savefig(save_path, format='png', transparent=True, dpi=300, pad_inches = 0)
参数解释:
format:文件格式(’png’,’pdf’,’svg’,’ps’等)
fname :包含文件路径或Python文件型对象的字符串。图片格式是从文件扩展名中推断出来的(例如pdf格式的.pdf)
dpi :设置每英寸点数的分辨率,默认为100
facecolor,edgecolor:子图之外的图形背景颜色,默认是’w’(白色)
pad_inches:要保存的图片范围,如果设置为‘tight‘则去除图片周围的空白
3.设置pyplot的动态rc参数
pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数
在pyplot中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等
由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数
两种方式可以设置参数,即全局参数定制和rc设置方法。
#查看matplotlib的rc参数:import matplotlib as pltprint(plt.rc_params())
部分参数截图:

常用参数:
Axes:设置坐标轴边界、颜色、坐标
刻度值大小和网格的显示;
Figure:设置边界颜色、图形大小和子区;
Font:设置字号、字体和样式;
Grid:设置网格颜色和线型;
Legend:设置图例和其中的文本显示;
Lines:设置线条颜色、宽度、线型等;
Savefig:对保存图像进行单独设置;
Xtick和ytick:X、Y轴的主刻度和次刻度设置颜色、大小、方向和标签大小。
线条的常用rc参数名称、解释与取值
lines.linewidth:线条宽度。取0-10之间的数值,默认为1.5。
lines.linestyle:线条样式。可取“-”“--”“-.”“:”四种。默认为“-”。
lines.marker:线条上点的形状。可取“o” “D” “h” “.” “,”
“S”等20种,默认为None。
lines.markersize:点的大小。取0-10之间的数值,默认为1。
常用线条类型解释:
| linestyle取值 | 意义 |
| - | 实线 |
| -. | 点线 |
| -- | 长虚线 |
| : | 短虚线 |
marker的取值和意义:
| o | 圆圈 | . | 点 |
| D | 菱形 | s | 正方形 |
| h | 六边形1 | * | 星号 |
| H | 六边形2 | d | 小菱形 |
| - | 水平线 | v | 一角朝下的三角形 |
| 8 | 八边形 | < | 一角朝左的三角形 |
| p | 五边形 | > | 一角朝右的三角形 |
| , | 像素 | ^ | 一角朝上的三角形 |
| + | 加号 | \ | 竖线 |
| None | 无 | x | X |
Rc参数使用:
import numpy as npimport matplotlib.pyplot as pltfig,ax = plt.subplots()#配置中文显示plt.rcParams['font.family'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsedef f(t):return np.cos(2*np.pi*t)x1 = np.arange(0.0,4.0,0.5)x2 = np.arange(0.0,4.0,0.01)plt.figure(1)plt.subplot(2,2,1)plt.plot(x1,f(x1),'bo',x2,f(x2),'k')plt.title('子图1')plt.subplot(2,2,2)plt.plot(np.cos(2*np.pi*x2),'r--')plt.title('子图2')plt.show()

import numpy as npimport matplotlib.pyplot as pltfig,ax = plt.subplots()plt.rcParams['font.family'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsedef f(t):return np.cos(2*np.pi*t)x1 = np.arange(0.0,4.0,0.5)x2 = np.arange(0.0,4.0,0.01)plt.figure(1)plt.subplot(2,2,1)plt.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='o')plt.title('子图1')plt.subplot(2,2,2)plt.plot(np.cos(2*np.pi*x2),'r--')plt.title('子图2')plt.show()

#改变刻度:ax.set_xticks([0,25,50,75,100])
#改变刻度:ax.set_xticklabels(['x1','x2','x3','x4','x5'],rotation=30,fontsize='small')
添加图例:添加每个图表时传递label参数
fig=plt.figure()ax=fig.add_subplot(1,1,1)ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='o',label='one')ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='+',label='two')ax.plot(np.random.randn(30).cumsum(),color='k',linestyle='dashed',marker='v',label='three')ax.legend(loc='best')

#rc参数设置import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号x1=np.arange(0.0,3.0,0.01)x2=np.arange(0.0,4.0,0.01)y1=np.cos(2*np.pi*x1)*np.exp(-x1)y2=np.cos(2*np.pi*x2)plt.subplot(2,1,1)plt.plot(x1,y1)plt.title('子图1')plt.xlabel('X轴')plt.ylabel('Y轴')

import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()#配置中文显示plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号def f(t):return np.cos(2*np.pi*t)x1=np.arange(0.0,5.0,0.5)x2=np.arange(0.0,5.0,0.01)plt.figure(1)plt.subplot(2,2,1)plt.plot(x1,f(x1),'bo',x2,f(x2),'k')plt.subplot(2,2,2)plt.plot(np.cos(2*np.pi*x2),'r--')plt.show()

import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号x1=np.arange(0.0,3.0,0.01)y1=np.cos(2*np.pi*x1)*np.exp(-x1)plt.subplot(2,1,1)plt.plot(x1,y1)plt.title('子图1')plt.xlabel('X轴')plt.ylabel('Y轴')plt.xlim(-5,3)plt.ylim(-10,50)plt.show()

4.绘图的填充
(1)调用函数fill_between() 实现曲线下面部分的填充:
import numpy as npimport matplotlib.pyplot as pltx=np.linspace(0,1,500)y=np.sin(3*np.pi*x)*np.exp(-4*x)fig,ax=plt.subplots()plt.plot(x,y)plt.fill_between(x, 0, y, facecolor='green', alpha=0.3)
x:第一个参数表示覆盖的区域, x,表示整个x都覆盖
0:表示覆盖的下限
y:表示覆盖的上限是y这个曲线
facecolor:覆盖区域的颜色
alpha:覆盖区域的透明度[0,1],其值越大,表示越不透明

(2)部分区域的填充:
import numpy as npimport matplotlib.pyplot as pltx=np.linspace(0,1,500)y=np.sin(3*np.pi*x)*np.exp(-4*x)fig,ax=plt.subplots()plt.plot(x,y)plt.fill_between(x[15:300], 0, 0.4, facecolor='green', alpha=0.3)

(3)两条曲线之间的区域填充:
import numpy as npimport matplotlib.pyplot as pltx=np.linspace(0,1,500)y1=np.sin(3*np.pi*x)*np.exp(-4*x)y2 = y1 + 0.2plt.plot(x, y1,'b')plt.plot(x, y2, 'r')plt.fill_between(x, y1, y2, facecolor='green', alpha=0.3)plt.show()

(4)利用fill进行绘图的填充:
import numpy as npimport matplotlib.pyplot as pltx=np.linspace(0,1,500)y=np.sin(3*np.pi*x)*np.exp(-4*x)fig,ax=plt.subplots()ax.fill(x,y)plt.show()

文本注解:
可以通过text函数在指定的位置(x,y)加入文本注解。
使用:
import numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.family'] = ['SimHei']data = [25,30,32,34,34,23]label = ['青海','兰州','北京','上海','广州','拉萨']plt.xticks(range(len( data)),label)plt.xlabel('城市')plt.ylabel('温度')plt.title('六城市8月份日均最高气温')plt.bar(range(len( data)),data)for x,y in zip(range(len(data)),data):plt.text(x,y,y,ha = 'center',va = 'bottom')plt.show()

5.pyplot中的常用绘图
(1)折线图:
折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
plot函数:
matplotlib.pyplot.plot(*args, **kwargs)
参数:
x,y:接收array。表示x轴和y轴对应的数据。无默认。
color:接收特定string。指定线条的颜色。默认为None。
linestyle:接收特定string。指定线条类型。默认为“-”。
marker:接收特定string。表示绘制的点的类型。默认为None。
alpha:接收0-1的小数。表示点的透明度。默认为None。
plot函数可以填入的主要参数:
颜色缩写:代表的颜色
b:蓝色 m:品红 g:绿色
y:黄色 r:红色 k:黑色
c:青色 w:白色
#简单折线图import numpy as npx1 = np.arange(0, 30)plt.plot(x1,x1*2, 'b')plt.show()

#带点的折线图import numpy as npx1 = np.arange(0, 30)plt.plot(x1,x1*2, 'b')plt.plot(x1,x1*2, 'bo')plt.show()

Series和DataFrame都有一个plot属性,用于绘制基本的图形。默认情况下,plot()绘制的都是折线。
import pandas as pds=pd.Series(np.random.randn(10).cumsum(),index=np.arange(0,100,10))s.plot()

Series的索引传入作为绘图的X轴,x轴的刻度和范围可以通过xticks和xlim调整。
import pandas as pds=pd.DataFrame(np.random.randn(10,4).cumsum(0),columns=['A','B','C','D'],index=np.arange(0,100,10))s.plot()

(2)散点图:
散点图(scatter diagram)又称为散点分布图,是利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。
值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。
scatter函数:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs)
x,y:接收array。表示x轴和y轴对应的数据。无默认。
s:接收数值或者一维的array。指定点的大小,若传入一维array则表示每个点的大小。默认为None。
c:接收颜色或者一维的array。指定点的颜色,若传入一维array则表示每个点的颜色。默认为None
marker:接收特定string。表示绘制的点的类型。默认为None。
alpha:接收0-1的小数。表示点的透明度。默认为None。
import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号x1=np.arange(1,30)y1=np.sin(x1)ax1=plt.subplot(1,1,1)plt.title('散点图')plt.xlabel('X')plt.ylabel('Y')lvalue=x1ax1.scatter(x1,y1,c='r',s=100,linewidths=lvalue,marker='o')plt.legend('x1')plt.show()

import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号for color in ['red','green','blue']:n=500x,y=np.random.randn(2,n) ax.scatter(x,y,c=color,label=color,alpha=0.3,edgecolors='none')ax.legend()ax.grid(True)plt.show()

(3)直方图:
直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。
用直方图便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。
bar函数:
matplotlib.pyplot.bar(left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs )
left:接收array。表示x轴数据。无默认。
height:接收array。表示x轴所代表数据的数量。无默认。
width:接收0-1之间的float。指定直方图宽度。默认为0.8。
color:接收特定string或者包含颜色字符串的array。表示直方图颜色。默认为None。
在dataframe中,柱状图将每一行中的值分组到并排的柱子中的一组
df=pd.DataFrame(np.random.rand(6,4),index=['one','two','three','four','five','six'],columns=pd.Index(['A','B','C','D'],name='Genus'))df.plot.bar()

import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号plt.figure(figsize=(7,5))x=np.arange(1,6)Y1=np.random.uniform(1.5,1.0,5)Y2=np.random.uniform(1.5,1.0,5)plt.bar(x,Y1,width=0.35,facecolor='lightskyblue',edgecolor='white')plt.bar(x+0.35,Y2,width=0.35,facecolor='yellowgreen',edgecolor='white')plt.show()

(4)饼图:
将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。
饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显现方式直观。
pie函数:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, … )
x:接收array。表示用于绘制撇的数据。无默认。
autopct:接收特定string。指定数值的显示方式。默认为None。
explode:接收array。表示指定项离饼图圆心为n个半径。默认为None。
pctdistance:接收float。指定每一项的比例和距离饼图圆心n个半径。默认为0.6。
labels:接收array。指定每一项的名称。默认为None。
labeldistance:接收float。指定每一项的名称和距离饼图圆心多少个半径。默认为1.1。
color:接收特定string或者包含颜色字符串的array。表示饼图颜色。默认为None。
radius:接收float。表示饼图的半径。默认为1。
plt.figure(figsize=(6,6))ax=plt.axes([0.1,0.1,0.8,0.8])#建立轴的大小labels='Springs','Summer','Autumn','Winter'x=[15,30,45,10]explode=(0.05,0.05,0.05,0.05)#这个是控制分离的距离的,默认的饼图不分离。plt.pie(x,labels=labels,explode=explode,startangle=60,autopct='%1.1f%%')#qutopct在图中显示比例值,注意值的格式。plt.title('Rany days by season')plt.show()
(5)箱线图:
能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。
箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。
boxplot函数:
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, … )
x:接收array。表示用于绘制箱线图的数据。无默认。
notch:接收boolean。表示中间箱体是否有缺口。默认为None。
sym:接收特定sting。指定异常点形状。默认为None。
vert:接收boolean。表示图形是横向纵向或者横向。默认为None。
positions:接收array。表示图形位置。默认为None。
widths:接收scalar或者array。表示每个箱体的宽度。默认为None。
labels:接收array。指定每一个箱线图的标签。默认为None。
meanline:接收boolean。表示是否显示均值线。默认为False。
import numpy as npimport matplotlib.pyplot as pltimport pandas as pdnp.random.seed(2) #设置随机种子df = pd.DataFrame(np.random.rand(5,4),columns=['A', 'B', 'C', 'D'])#先生成0-1之间的5*4维度数据,再装入4列DataFrame中df.boxplot() #也可用plot.box()plt.show()

(6)概率图:
用来表示变量间概率依赖关系的图。
正态分布又名高斯分布。
正态概率密度函数 normpdf(X,mu,sigma)
其中,x为向量,mu为均值,sigma为标准差。
import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号np.random.seed(1587554)mu=100sigma=15x=mu+sigma*np.random.randn(437)num_bins=50n,bins,patches=ax.hist(x,num_bins,normed=1)y=plt.mlab.normpdf(bins,mu,sigma)ax.plot(bins,y,'--')fig.tight_layout()plt.show()

import numpy as npimport matplotlib.pyplot as pltfig,ax=plt.subplots()plt.rcParams['font.family']=['SimHei']#用来显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号np.random.seed(1587554)mu=100sigma=15x=mu+sigma*np.random.randn(437)num_bins=50n,bins,patches=ax.hist(x,num_bins,normed=1)y=plt.mlab.normpdf(bins,mu,sigma)ax.plot(bins,y,'--')fig.tight_layout()plt.show()





