python可视化模块—matplot绘制图表

python可视化模块—matplot绘制图表Matplotlib(mathematicplotlib,数学绘图库)是一个可视化绘图库

一、Matplotlib基本介绍

Matplotlib(mathematic plot lib,数学绘图库)是一个可视化绘图库。可以使用这个库轻松地完成线形图、直方图、条形图、误差图或散点图等操作,设置标签、图例、调整绘图大小等。是python中使用最广的绘图库。有很多库(如pandas,seaborn)的绘图功能都是基于matplotlib实现的。

pyplot(python plot,python绘图)是Matplotlib的一个基于状态的接口,可以快速的绘制图表,通常我们绘图只需要通过pyplot的接口就可以了。

在Jupyter notebook中进行交互式绘图,需要执行一下语句:

%matplotlib notebook

使用matplotlib时,使用的导入的语句

import matplotlib.pyplot as plt from matplotlib import pyplot as plt

二、两种绘图方式区别(plt.*** 和ax.***)

python可视化模块—matplot绘制图表

利用matplotlib画图有两种方式,一个直接调用pyplot模型中的相应函数就可以完成绘图,称为过程式绘图;另一种可以在画布上显示多个图表,称为面向对象绘图,fig.subplots()无参数创建图表,默认创建一个图表。

先matplotlib架构上理解,可以理解为:

matplotlib架构上分为三层  

底层:backend layer

中层:artist layer  

最高层:scripting layer

在任意一层操作都能够实现画图的目的,而且画出来还都一样。但越底层的操作越细节话,越高层越易于人机交互。

plt. 对应的就是最高层 scripting layer。这就是为什么它简单上手,但要调细节就不灵了。

ax.plot 是在 artist layer 上操作。基本上可以实现任何细节的调试。

三、如何使用Matplotlib绘图

快速绘图的流程:从左往右

python可视化模块—matplot绘制图表

1、画布—绘画的画板

函数接口 函数作用 参数说明
plt.figure() 创建一个新的绘图窗口,设置画布大小。 figsize:参数格式为(width,height),单位为inch。dpi参数:分辨率,指每inch像素数。默认dpi为100。例figsize=(18,6)
fig.add_subplot(row,col,index) 在新的绘图窗口上创建子图,子图相互独立 无显式参数,逗号可以省略,fig.add_subplot(2,2,2)与fig.add_subplot(222)都可以。 row:行,col:列,index:子图的位置
plt.show() 显示当前figure图像
plt.close() 关闭当前figure窗口

过程式绘图

import matplotlib.pyplot as plt import numpy as np x = np.random.random(10) y = np.random.random(10) plt.plot(x,y) #绘制拆线图 plt.show() #显示图形

python可视化模块—matplot绘制图表

说明:依次调用pyplot模块中的相应函数就可以完成绘图。

面向对象绘图

import matplotlib.pyplot as plt fig=plt.figure(figsize=(18,6)) ax1=fig.add_subplot(2,2,1) # 创建2*2=4张图,ax1画在第一张图上 ax2=fig.add_subplot(2,2,2) # 创建2*2=4张图,ax2画在第二张图上 ax3=fig.add_subplot(2,2,3) # 创建2*2=4张图,ax3画在第三张图上 ax4=fig.add_subplot(2,2,4) # 创建2*2=4张图,ax4画在第四张图上 plt.show() # 显示画布 plt.close() # 关闭画布

说明:

1、先通过plt.figure()函数创建一张完整的画面,作为底层,之后的所有操作都在这张画布上完成。

2、再通过figure.add_subplot()函数创建子图,相当于在已创建的画布上再叠加子图,子画布间相互独立,这样就可以达到一次性完成多幅图片的效果。

python可视化模块—matplot绘制图表

3、创建多个子图,可通过循环最后一个参数达到效果。

fig=plt.figure(figsize=(18,6)) for i in range(1,5): ax=fig.add_subplot(2,2,i) plt.show() plt.close()

4、在一张画布上创建子图的其他方法

#方法1 fig=plt.figure() ax=fig.add_axes([left, bottom, width, height]) #方法2 fig,ax=plt.subplots(行数, 列数)

2、配置—更个性化的绘图

全局配置

过程式和面向对象式配图都适用

指定中文字体

函数接口 函数作用 参数说明
matplotlib.font_manager.FontProperties() 指定中文字体 font_path:指定字体的路径。
# 指定中文字体样式、大小 import matplotlib.font_manager as mfm # 请换成自己电脑的字体路径 font_path = r"c:\windows\Fonts\simsun.ttc" prop = mfm.FontProperties(fname = font_path) fig = plt.figure() ax1 = fig.add_subplot(111) ax1.set_title('你好',fontproperties=prop,fontsize=20) plt.show()

指定全局画图主题

函数接口 函数作用 参数说明
plt.style.use() 指定画图主题 无显式参数,style_name:设置主题名

常用主题:’ggplot’、‘seaborn-bright’、‘seaborn-white’、‘seaborn-darkgrid’、‘season-deep’

# 查看所有主题 plt.style.available 

python可视化模块—matplot绘制图表

# 指定全局画图主题为ggplot plt.style.use('ggplot') 

python可视化模块—matplot绘制图表

局部配置
面向对象绘图过程:ax代表子图变量

图表标题设置

函数接口 函数作用 参数说明
ax.set_title() 在当前图形中添加主题,可以指定标题的名称、位置、颜色、字体大小等参数。 label:标题文字,fontsize:指定字体大小,color:指定字体颜色,loc可选值为{‘left’,‘center’,‘right’},默认值为’center’

ax.set_title(“sample”):设置图表标题。
ax.set_title(“title”, loc=‘left’):设置图表标题位置。

坐标轴设置

函数接口 函数作用 参数说明
ax.set_xlabel() 当前图形中添加x轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。 xlabel:标签文字,fontsize:指定字体大小
ax.set_ylabel() 当前图形中添加y轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。 ylabel:标签文字,fontsize:指定字体大小
ax.set_xlim() 设置当前图形中x轴的范围,只能确定一个数值区间,而无法使用字符串标识。 left:指定最小值,right:指定最大值,可以使用tuple合并表示(left,right)
ax.set_ylim() 设置当前图形中y轴的范围,只能确定一个数值区间,而无法使用字符串标识。 bottom:指定最小值,top:指定最大值,可以使用tuple合并表示(bottom,top)
ax.set_xticks() 指定x轴刻度的数目与取值。 ticks:传入列表,每个元素代表一个刻度值。
ax.set_yticks() 指定y轴刻度的数目与取值。 ticks:传入列表,每个元素代表一个刻度值。
ax.set_xticklabels() 设置x轴刻度的显示值。 labels:每个刻度上显示的值,fontsize:指定字体大小
ax.set_yticklabels() 设置y轴刻度的显示值。 labels:每个刻度上显示的值,fontsize:指定字体大小
ax.hlines() 设置水平线 y:某个纵坐标,固定值。xmin:横坐标最小值。xmax:横坐标最大值。
ax.vlines() 设置垂直线 x:某个纵坐标,固定值。ymin:横坐标最小值。ymax:横坐标最大值。
ax2=ax1.twinx() 子图ax1、ax2共享x轴
ax2=ax1.twiny() 子图ax1、ax2共享y轴

设置坐标轴标签文本
ax.set_xlabel(‘X axis’)
ax.set_ylabel(‘Y axis’)

设置x,y轴坐标刻度显示范围
ax.set_xlim(-3.5,3.5)
ax.set_ylim(-1.5,1.5)

设置主刻度坐标
ax.set_xticks([-4,-2,0,2,4])
ax.set_yticks([-1,-0.5,0,0.5,1])
设置次刻度坐标
ax.set_xticks(np.arange(-4,4,0.5),minor=True)
ax.set_yticks(np.arange(-1.5,1.5,0.1),minor=True)

图例

函数接口 函数作用 参数说明
ax.legend 指定当前图形的图例,可以指定图例大小、位置、标签。 labels:标签名。loc:图例的位置。bbox_to_anchor:指定图例的位置(横坐标,纵坐标)(横纵最大1.0,最小0.0)。prop:等同于fontproperties。fontsize:字体大小。

ax.legend(loc=‘upper right’):自定义图例位置。

loc 可选择的参数

  • ‘best’:自动选择最佳位置
  • ‘upper left’:左上角
  • ’upper right’:右上角
  • ‘lower left’:左下角
  • ‘lower right’:右下角
  • ‘center left’:中左
  • ‘center right’:中右
  • ‘lower center’:中下
  • ‘upper center’:中上

ax.legend(fontsize=‘samll’) 自定义图例文字大小。
ax.legend(fontsize=10)

fontsize 可选择的参数

  • 相对大小(字符串)
    ‘xx-small’,‘x-small’,‘smal’:小于当前默认字体大小
    ‘medium’:中等
    ‘large’,‘x-large’,‘xx-large’:大于当前默认字体大小
  • 绝对大小(数值)
    fontsize=10:绝对字体大小,单位为点。

ax.legend(labelcolor=[‘r’,‘b’]):设置图例文本颜色。
ax.legend(mode=‘expand’):图例水平平铺。

保存图形

函数接口 函数作用 参数说明
plt.savefig() 保存图片 fname:文件名;dpi:像素,单个数值即可。

plt.savefig(“sample.png”)

支持如下格式:

jpg, jpeg:jpg图

png:png图

svg, svgz:svg图

tif, tiff:tiff图

pgf:pgf位图

pdf, eps, ps:pdf或postscript文件

raw, rgba

面向对象画图的代码示例

#准备数据 import numpy as np x=np.linspace(-np.pi,np.pi,100) y=np.sin(x) #导入matplotlib库pyplot模块 import matplotlib.pyplot as plt #创建画布 fig=plt.figure() #创建图表 ax=fig.subplots() #绘制折线图,设置点线样式,设置线条名称 ax.plot(x,y,'+r--', label='line1',mec='b',ms=10) #点为蓝色+(大小为10),线为红色虚线 #设置坐标轴 ax.set_xlabel('X axis') #坐标轴文本标签 ax.set_ylabel('Y axis') ax.set_xticks([-4,-2,0,2,4]) #主刻度 ax.set_xticks(np.arange(-4,4,0.5),minor=True) #次刻度 ax.set_yticks([-1,-0.5,0,0.5,1]) ax.set_yticks(np.arange(-1.5,1.5,0.1),minor=True) ax.tick_params(axis='y',labelrotation=30) #y轴主刻度文字旋转30度 ax.set_xlim(-3.5,3.5) #设置显示刻度范围 ax.set_ylim(-1.5,1.5) ax.grid(True) #显示主刻度网格 #设置图例 ax.legend() #注意需要绘图时,需指定label参数 #设置标题 ax.set_title("sample") #保存显示图形 fig.savefig("sample.png") plt.show()
过程式绘图过程

图表标题设置

函数接口 函数作用
plt.title() 在当前图形中添加主题,可以指定标题的名称、位置、颜色、字体大小等参数。

坐标轴设置

函数接口 函数作用
plt.xlabel() 在当前图形中添加x轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。
plt.ylabel() 当前图形中添加y轴名称,可以指定标题的名称、位置、颜色、字体大小等参数。
plt.xlim() 指定当前图形中x轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.ylim() 指定当前图形中y轴的范围,只能确定一个数值区间,而无法使用字符串标识。
plt.xticks() 指定x轴刻度的数目与取值。
plt.yticks() 指定y轴刻度的数目与取值。

图例

函数接口 函数作用
plt.legend() 指定当前图形的图例,可以指定图例大小、位置、标签。

说明:方法参数基本上与面向对象方式一致。只是调用属性有区别。

过程式画图的代码示例:

#准备数据 import numpy as np x=np.linspace(-np.pi,np.pi,100) y=np.sin(x) #导入matplotlib库pyplot模块 import matplotlib.pyplot as plt #绘制折线图,设置点线样式,设置线条名称 plt.plot(x,y,'+r-.', label='line1') #点为蓝色+,线为红色点划线 #设置坐标轴 plt.xlabel('X axis') #坐标轴文本标签 plt.ylabel('Y axis') plt.xticks([-4,-2,0,2,4]) #主刻度,不支持次刻度设置 plt.yticks([-1,-0.5,0,0.5,1], rotation=30) plt.xlim(-3.5,3.5) #设置显示刻度范围 plt.ylim(-1.5,1.5) plt.grid(True,c='gray',linestyle=':') #显示主刻度网格 #设置图例 plt.legend() #注意需要绘图时,指定label参数 #设置标题 plt.title("sample") #保存显示图形 plt.savefig("sample.png") plt.show()

四、常用绘图图形

如何选择常用绘图图形?

python可视化模块—matplot绘制图表

散点图

散点图(scatter diagram,scatter:分散;撒;四散;散开;驱散;撒播)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。

散点图主要功能利用坐标点(散点)的分布形态反映特征间的统计关系(相关性)的一种图形。

1)线性相关:x,y变量的散点看上去都在一条直线附近波动;

2)非线性相关:x,y变量的散点都在某条曲线(非直线)附近波动;

3)不相关:所有点在图中没有显示任何关系

scatter()函数

函数接口 函数作用
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs) 绘制散点图

基本参数说明:

参数名称 说明
x,y x:自变量。y:因变量。
s 指定点的大小,数值或者一维的array,若传入一维array则表示每个点的大小。默认为None。
c 指定点的颜色,浮点数、颜色或者颜色列表,若传入一维array则表示每个点的颜色,默认为None。
marker 表示绘制点的类型,待定string,默认为小圆圈‘o’。
cmap Colormap,默认为None,标量或者是一个colormap的名字,只有c是一个浮点数数组的时才使用,如果没有申明就是image.cmap。
norm Normalize,默认为None,数据亮度在0-1之间,只有c是一个浮点数的数组时才使用。
vmin,vmax 亮度设置,在norm参数存在时忽略。
alpha 表示点的透明度,0-1的小数,默认为None,即不透明。
linewidths 散点的边缘线宽。
edgecolors 散点的边缘颜色,默认为 ‘face’,可选值有 ‘face’, ‘none’。
**kwargs 其他参数。

举例1:

import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager as mfm fig,ax=plt.subplots() #创建画布与图表 plt.rcParams['font.family']=['SimHei'] #用来显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #准备数据 x1=np.arange(1,30) y1=np.sin(x1) ax=plt.subplot(1,1,1) plt.title('散点图') plt.xlabel('X') plt.ylabel('Y') lvalue=x1 #绘制散点图。颜色为'r',点的大小为s,散点的边缘线宽为linewidths,点的类型为marker。 ax.scatter(x1,y1,c='r',s=100,linewidths=lvalue,marker='o') plt.legend('x1') plt.show()

在这里插入图片描述

举例2:

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() plt.rcParams['font.family']=['SimHei'] #用来显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 #绘制散点图。颜色为['red','green','blue'],透明度为0.3,散点的边缘颜色为'none'。 for color in ['red','green','blue']: n=500 x,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()

python可视化模块—matplot绘制图表

举例3:

比较特别的,用浮点数表示颜色,表示从当前matplotlib.colors.Colormap映射得到的颜色,相当于多个调色盘的合集。并非所有颜色参数都可以浮点数表示(比如plot就不行)。

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() #创建画布与图表 #准备数据 x=np.random.randn(50)*10 #随机产生50个x轴坐标 y=np.random.randn(50)*10 #随机产生50个y轴坐标 sizes=(np.random.randn(50)*10)**2 #随机产生50个用于改变散点面积的数值 colors=np.random.randn(50)*10 #绘制散点图。颜色为colors,大小为sizes(单位points^2),透明度为0.5 ax.scatter(x,y,s=sizes,c=colors,alpha=0.5) plt.show()

python可视化模块—matplot绘制图表

折线图

折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照x轴坐标顺序连接起来的图形。可以只显示点、只显示线,或者点、线都显示。

折线图的主要功能观察因变量y随着自变量x改变的趋势

  • 最适合用于显示随时间(根据常用比例设置)而变化的连续数据
  • 适合用于观察数量的差异,增长趋势的变化。

plot()函数

函数接口 函数作用
matplotlib.pyplot.plot(*args, **kwargs) 绘制折线图

基本参数说明:

参数名称 说明
x,y x:自变量。y:因变量。
marker 绘制的点的样式,接受特定string,默认为None,例如marker=‘o’。
markersize 绘制点的大小,ms=1.5。
linestyle 线条样式,接受特定string,默认为’-‘。
linewidth 线条宽度
color 线条颜色,接受特定string,默认为None。‘b’:蓝色,‘g’:绿色,’r’:红色,‘c’:青色,’m’:品红,‘y’:黄色,’k’:黑色,’w’:白色。
markerfacecolor 点填充颜色。例如mfc=‘r’。
markeredgecolor 点边缘颜色。例如meg=‘g’。
markeredgewidth 点边缘宽度。例如mew=0.5。
alpha 表示点的透明度,0-1的小数,默认为None。
fmt = ‘[marker][line][color]’ fmt为字符串由点样式、颜色、线样式组成,例如’+r–’:点样式为+,颜色为红色,线样式为虚线

举例1:

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() #创建画布与图表 #准备数据 x=np.linspace(0,4*np.pi,50) #通过定义均匀间隔创建数值序列 y1=np.sin(x) y2=np.cos(x) y3=np.cos(x+np.pi) #绘制'line1'。线条为灰色,线形为点划线('-.'),线宽为1。 ax.plot(x,y1,c='gray',linestyle='-.',linewidth=1,label='line1') #绘制'line2'。线条为红色,线型为虚线('--') ax.plot(x,y2,'r--',label='line2') #绘制'line3'。同时显示点和线。 #点大小为10,填充颜色为绿色,边缘颜色为红色,边缘宽度为1。 #线为蓝色实绩,线条宽度为2。 ax.plot(x,y3,'ob-',mfc='g',mec='r',ms=10,linewidth=2,label='line3') ax.legend(loc='upper right') #设置图例 plt.show()

python可视化模块—matplot绘制图表

箱线图

箱线图(boxplot)也称箱须图,其绘制需使用数据中的五个常用统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据。

箱线图主要功能是能提供有关数据的位置和分散情况等相关信息,可以粗略地看出数据是否具有对称性、分布的分散程度等。

适用于比较几个样本,观察其不同特征。

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 表示中间简体是否有缺口,默认为None,接boolean。
sym 指定异常点(超出Q0-Q5范围的值的绘制颜色和符号,默认为None,接收特定string。
vert 表示图形是纵向或者横向,默认为None。
positions 表示图形位置,接叫array,默认为None。
widths 接收scalar或者array,表示每个箱体的宽度,默认为None。
labels 指定每一个箱线图的标签,默认为None。
meanline 表示是否显示均值线,接叫boolean,默认为False。
showfliers False:不显示超出Q0-Q5范围的点,True:显示超出Q0-Q5范围的点。
whis=1.5 Q0=Q1-whis*(Q3-Q1),Q5=Q3+whis*(Q3-Q1)

举例1:

import numpy as np import matplotlib.pyplot as plt import pandas as pd fig,ax=plt.subplots() #准备数据 np.random.seed(2) df=pd.DataFrame(np.random.rand(5,4),columns=['A','B','C','D']) #df.boxplot() ax.boxplot(df,sym='r+',whis=1.25) plt.show()

在这里插入图片描述

柱状图

柱状图一般用横轴表示数据所属类别,纵轴表示数量或者占比

柱状图主要功能是观察数据模式、样本的频率分布和总体的分布

  • 适用于比较产品质量特性的分布状态,判断其总体质量分布情况。
  • 适用于属于不同组别的统计,可以用于比较组别的数据差异。

与直方图区别:

1)直方图展示数据的分布,柱状图比较数据的大小

2)直方图X轴为定量数据(数据区间),柱状图X轴为分类数据

3)直方图柱子无间隔(区间是连续的),柱状图柱子有间隔

4)直方图柱子宽度可不一,柱状图柱子宽度须一致

bar()函数

函数接口 函数作用
matplotlib.pyplot.bar(x,left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs ) 绘制柱状图

bar()函数绘制垂直柱状图,barh()函数绘制水平柱状图。

基本参数说明:

参数名称 说明
x bar坐标刻度参数。也是默认的坐标刻度文本。barh为y参数。
left 每根柱子最左边的刻度,接受list。
height 每根柱子的高度,即y轴上的坐标。浮点数或类数组结构。
width 柱子的宽度,接收0-1之间的float,如0.5。
bottom 柱子最低处的高度,浮点数或类数组结构。如0.5。
color 柱子的颜色,颜色值或颜色值序列。如‘red’。
edgecolor 柱形图边缘颜色,颜色值或颜色值序列。
linewidth 柱形图边缘宽度,浮点数或类数组。如果为0,不绘制柱子边缘。
tick_label 坐标刻度文本,字符串或字符串列表。不再使用x,y作为柱标签。

举例1:

单个柱状图代码示例

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() #准备数据 x=np.arange(6) y=np.random.uniform(0,10,6) ax.bar(x,y) #绘制简单柱状图。用x坐标文本标签 ax.bar(x,y,tick_label=list('abcdef'),color='gray',lw=1,ec='orange') #制定文本作为标签,填充灰色,描边宽度为1,颜色为橙色 plt.show()

在这里插入图片描述

举例2:

设置柱形图宽度,bar() 方法使用 width 设置,barh() 方法使用 height 设置 height
垂直柱状图与水平柱状图代码示例(两种作图方式):

import numpy as np import matplotlib.pyplot as plt fig,axes=plt.subplots(2,1) data=pd.Series(np.random.randn(16),index=list('abcdefghijklmnop')) data.plot.bar(ax=axes[0],color='gray',alpha=0.7) #绘制垂直柱状图 data.plot.barh(ax=axes[1],color='gray',alpha=0.7) #绘制水平柱状图

在这里插入图片描述

import numpy as np import matplotlib.pyplot as plt fig=plt.figure(figsize=(18,6)) ax1=fig.add_subplot(211) ax2=fig.add_subplot(212) x1=list('abcdefghijklmnop') y1=np.random.randn(16) ax1.bar(x1,y1,color='gray',alpha=0.7,width=0.5,) ax2.barh(x1,y1,color='gray',alpha=0.7,height=0.5)

在这里插入图片描述

举例3:

分组柱形图代码示例:

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

在这里插入图片描述

举例4:

分组柱形图(进阶)代码示例:

import matplotlib import matplotlib.pyplot as plt import numpy as np import matplotlib.patches as mpatches matplotlib.rcParams['font.sans-serif']=['SimHei'] matplotlib.rcParams['axes.unicode_minus']=False plt.rcParams['xtick.direction'] = 'in' plt.rcParams['ytick.direction'] = 'in' fig,ax=plt.subplots(figsize=(20, 8),dpi=80) year = ['2015年','2016年','2017年'] data1 = [68826, 73125, 77198] data2 = [50391, 54455, 57892] # 先得到year长度, 再得到下标组成列表 x = range(len(year)) ax.bar(x,data1,width=0.2,color='#FF6347') # 向右移动0.2,柱状条宽度为0.2 ax.bar([i + 0.2 for i in x],data2,width=0.2,color='#008B8B') # 底部汉字移动到两个柱状条中间(本来汉字是在左边蓝色柱状条下面, 向右移动0.1) ax.set_xticks([i+0.1 for i in x]) ax.set_xticklabels(year, fontsize=15) ax.set_ylabel('人数(万人)',size=13) color = ['#FF6347', '#008B8B'] labels = ['中国网民规模', '中国网络视频用户规模'] patches = [mpatches.Patch(color=color[i], label="{:s}".format(labels[i]) ) for i in range(len(color))] ax=plt.gca() box = ax.get_position() ax.set_position([box.x0, box.y0, box.width , box.height* 0.8]) #下面一行中bbox_to_anchor指定了legend的位置 ax.legend(handles=patches, bbox_to_anchor=(0.65,1.12), ncol=3) #生成legend # 为每个条形图添加数值标签 for x1,y1 in enumerate(data1): ax.text(x1, y1+200, y1,ha='center',fontsize=16) for x2,y2 in enumerate(data2): ax.text(x2+0.2,y2+200,y2,ha='center',fontsize=16) plt.show()

在这里插入图片描述

饼图

饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。

饼图主要功能是反映出部分与部分、部分与整体之间的比例关系。

适用于要求直观地展示每组数据相对于总数的大小。

pie()函数

函数接口 函数作用
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source] 绘制饼图

基本参数说明:

参数名称 说明
x 每一块饼的数值,浮点型数组或列表。
explode 每块饼突出来的距离,数组。如 explode=[0,0.2,0,0]:第i个数字表示第i个饼炸开距离(数值×半径=距离),explode参数的长度必须和x参数相同。
labels 指定第一个饼图的文本标签,列表,默认为None。
colors 每块饼的颜色,数组,默认为None。
autopct 指定数值的显示方式,设置小数点,默认为None,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分。
labeldistance 标签标记的绘制位置,相对于半径的比例,默认为1.1,如<1则绘制在饼图内侧,float。
pctdistance 类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
shadow 布尔值 True 或 False,是否有阴影,默认为 False,不设置阴影。
radius 设置饼图的半径,默认为1。
startangle 指定饼图的起始角度,默认从x轴正方向逆时针画起,如设定=90则从y轴正方向画起。
counterclock 布尔值,用于指定是否逆时针绘制扇形,默认True,即逆时针绘制,False为顺时针。
wedgeprops 字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等,如
textporps 字典类型, 用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为None。
center 浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)
frame 布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是True,绘制带有表的轴框架。
rotatelabels 布尔类型,指定是否旋转文本标签,默认为False。如果为True,旋转每个label到指定的角度。
data 用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。

举例1:

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() #准备数据 labels='Spring','Summer','Autumn','Winter' x=[15,30,45,60] ax.pie(x ,labels=labels #设置标签 ,explode=[0,0,0.1,0] #第3个饼图炸开 ,wedgeprops={'lw':2,'ec':'lightblue'} #描边 ,startangle=60 #起始角度,默认从0开始逆时针转 ,autopct='%1.1f%%' #在图中显示比例值,注意值的格式。 ) ax.set_title('Rany days by season') plt.show()

在这里插入图片描述

直方图

直方图(Histogram)又称质量分布图,是统计报告图的一种,表示同一组数据在连续间隔或者特定时间段内容的分布情况,横轴表示数据类型(同一个变量的分组统计),纵轴表示一组数据分布情况,每个数据宽度可以任意变化。

直方图主要功能是描述一组数据的频次分布,有助于观察众数、中位数的位置,关注数据存在缺口或者异常值。

hist()函数

函数接口 函数作用
matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, **kwargs) 绘制直方图

基本参数说明:

参数名称 说明
x 表示要绘制直方图的数据,可以是一个二元组或列表。
bins 表示直方图的箱数,默认为10。
range 表示要直方图的值域范围,可以是一个一维数组或列表。默认为None,即使用数据中的最小值和最大值。
density 表示是否将直方图归一化,默认为False,即直方图的高度为每个箱子内的样本数,而不是频率或概率密度。
weights 表示每个数据点的权重,默认为None。
cumulative 表示是否绘制累积分布图,默认为False。
bottom 表示直方图的起始高度,默认为None。
histtype 表示直方图类型,可以是’bar’、’barstacked’、‘step’、‘stepfilled’等。默认为’bar’。
align 表示直方图箱子的对齐方式,可以是’left’、‘mid’、‘right’。默认为’mid’。
orientation 表示直方图的方向,可以是’vertical’、‘horizontal’。默认为’vertical’。
rwidth 表示每个箱子的宽度。默认为None。
log 表示是否在y轴上使用对数刻度。默认为False。
color 表示直方图的颜色。
label 表示直方图的标签。
stacked 表示是否堆叠不同的直方图。默认为False。
**kwargs 表示其他绘图参数。

举例1:

import numpy as np import matplotlib.pyplot as plt fig,ax=plt.subplots() # 使用 NumPy 生成随机数 x= np.random.normal(170, 10, 250) ax.hist(x,bins=30,color='r',cumulative=True) ax.set_xlabel('random test') plt.show() plt.close()

在这里插入图片描述

五、绘图数据和多子图绘图

列表绘图

import numpy as np import matplotlib.pyplot as plt x=[1,2,3,4] y=[1,4,9,16] plt.plot(x,y) plt.show()

数组绘图

import numpy as np import matplotlib.pyplot as plt t=np.arange(0,5,0.2) #线条1 x1=y1=t #线条2 x2=x1 y2=t**2 #线条3 x3=x1 y3=t**3 #使用plot绘制线条 lineslist=plt.plot(x1,y1,x2,y2,x3,y3) #使用setp方法可以同时设置多个线条的属性 plt.setp(lineslist,color='r') plt.show() print('',type(lineslist)) print('',len(lineslist))

字典绘图

import numpy as np import matplotlib.pyplot as plt data={'x':np.arange(50), 'y':np.random.randint(0,50,50), 'color':np.random.randn(50)} plt.scatter('x','y',c='color',data=data) plt.show()

多子图绘制

可以用如下三个方法创建多个子图

  • fig,axes=plt.subplots(m,n):一次生成m行n列子图。
  • axes=fig.subplots(m,n):一次生成m行n列子图,返回m*n个axes对象。
  • fig.add_subplot((m,n,i)):增加一个子图,m行n列放在第i个。建议采用这个方法创建多子图。
    • 也可以fig.add_subplots(mni)方式调用。

举例1:

fig,axes=plt.subplots(m,n):一次生成m行n列子图。

import numpy as np import matplotlib.pyplot as plt ax=plt.subplots(2,2) ax1=ax[0] ax2=ax[1] ax3=ax[2] ax4=ax[3] ax1.plot(x,y)

举例2:

fig.add_subplot((m,n,i)):增加一个子图,m行n列放在第i个。建议采用这个方法创建多子图。

import numpy as np import matplotlib.pyplot as plt #准备数据 x=np.linspace(-np.pi,np.pi,100) y=np.sin(x) fig=plt.figure() ax1=fig.add_subplot(2,2,1) ax1.plot(x,y,'r-') ax2=fig.add_subplot(2,2,3) ax2.plot(x,y,'b:') ax3=fig.add_subplot(1,2,2) ax3.plot(x,y,'Dg--') plt.show()

在这里插入图片描述

画布级别标题和标签

  • fig.suptitle(“figtitle”):设置总标题(与所有子图平级)
  • fig.supxlabel(“figxlabel”):设置总x标签(如果所有子图标签相同,可以只设置一个总标签)
  • fig.supylabel(“figxlabel”):设置总y标签

子图间距

  • fig.subplots_adjust(wspace=0.5,hspace=0.5):调整子图之间的间距
    • wspace:表示子图间宽度方向间隔系数
    • hspace:表示子图间高度方向间隔系数
  • fig.tight_layout(pad=1):调整子图四周空白宽度
    • pad:四周空白宽度系数
    • w_pad:宽度方向空白宽度系数
    • h_pad:高度方向空白宽度系数
import numpy as np import matplotlib.pyplot as plt #准备数据 x=np.linspace(-np.pi,np.pi,100) y=np.sin(x) fig=plt.figure() #画布设置 fig.suptitle("figtitle", x=0.5, y=0.98) fig.supxlabel("figxlabel", x=0.5, y=0.02) fig.supylabel("figylabel", x=0.02, y=0.5) fig.subplots_adjust(wspace=0.5,hspace=0.5) fig.tight_layout(pad=2) ax1=fig.add_subplot(2,2,1) ax1.plot(x,y,'r-') ax2=fig.add_subplot(2,2,3) ax2.plot(x,y,'b:') ax3=fig.add_subplot(1,2,2) ax3.plot(x,y,'Dg--') plt.show()

在这里插入图片描述

参考文章:
Matplotlib系列(一):快速绘图入门_matplotlib思维导图-CSDN博客
python利用matplotlib进行可视化_import numpy as np data = np.arange(10) data plt.p-CSDN博客
【python绘图】Matplotlib绘图及设置(使用python制图)_python画图设置-CSDN博客
​Matplotlib入门-6-plt.bar( )绘制柱状图 – 知乎

转自:python可视化模块—快速利用matplot绘制图表-CSDN博客

今天的文章
python可视化模块—matplot绘制图表分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/80416.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注