python可视化模块—快速利用matplot绘制图表

文章目录

  • 一、Matplotlib基本介绍
  • 二、两种绘图方式区别(plt.*** 和ax.***)
  • 三、如何使用Matplotlib绘图
    • 1、画布—绘画的画板
    • 2、配置—更个性化的绘图
      • 全局配置
      • 局部配置
        • 面向对象绘图过程:ax代表子图变量
        • 过程式绘图过程
  • 四、常用绘图图形
    • 如何选择常用绘图图形?
    • 散点图
    • 折线图
    • 箱线图
    • 柱状图
    • 饼图
    • 直方图
  • 五、绘图数据和多子图绘图
    • 列表绘图
    • 数组绘图
    • 字典绘图
    • 多子图绘制


一、Matplotlib基本介绍

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

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

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

  • 使用matplotlib时,使用的导入的语句
    import matplotlib.pyplot as plt
    from matplotlib import pyplot as plt


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

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

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

matplotlib架构上分为三层  
底层:backend layer
中层:artist layer  
最高层:scripting layer在任意一层操作都能够实现画图的目的,而且画出来还都一样。但越底层的操作越细节话,越高层越易于人机交互。plt. 对应的就是最高层 scripting layer。这就是为什么它简单上手,但要调细节就不灵了。ax.plot 是在 artist layer 上操作。基本上可以实现任何细节的调试。

三、如何使用Matplotlib绘图

快速绘图的流程:从左往右
在这里插入图片描述

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
plt.plot(x,y)	#绘制拆线图
plt.show()		#显示图形

说明:依次调用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()函数创建子图,相当于在已创建的画布上再叠加子图,子画布间相互独立,这样就可以达到一次性完成多幅图片的效果。
在这里插入图片描述

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 

在这里插入图片描述

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

在这里插入图片描述

局部配置

面向对象绘图过程: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()

四、常用绘图图形

如何选择常用绘图图形?

在这里插入图片描述

散点图

  • 散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。
  • 散点图主要功能利用坐标点(散点)的分布形态反映特征间的统计关系(相关性)的一种图形。
    • 线性相关:x,y变量的散点看上去都在一条直线附近波动;
    • 非线性相关:x,y变量的散点都在某条曲线(非直线)附近波动;
    • 不相关:所有点在图中没有显示任何关系

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,yx:自变量。y:因变量。
s指定点的大小,数值或者一维的array,若传入一维array则表示每个点的大小。默认为None。
c指定点的颜色,浮点数、颜色或者颜色列表,若传入一维array则表示每个点的颜色,默认为None。
marker表示绘制点的类型,待定string,默认为小圆圈‘o’。
cmapColormap,默认为None,标量或者是一个colormap的名字,只有c是一个浮点数数组的时才使用,如果没有申明就是image.cmap。
normNormalize,默认为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 pltfig,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=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:

比较特别的,用浮点数表示颜色,表示从当前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()

在这里插入图片描述

折线图

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

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

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

plot()函数

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

基本参数说明:

参数名称说明
x,yx:自变量。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.linspaec(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()

在这里插入图片描述

箱线图

  • 箱线图(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。
showfliersFalse:不显示超出Q0-Q5范围的点,True:显示超出Q0-Q5范围的点。
whis=1.5Q0=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()函数绘制水平柱状图。

基本参数说明:

参数名称说明
xbar坐标刻度参数。也是默认的坐标刻度文本。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 mpatchesmatplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=Falseplt.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 pltx=[1,2,3,4]
y=[1,4,9,16]plt.plot(x,y)plt.show()

数组绘图

import numpy as np 
import matplotlib.pyplot as pltt=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 pltdata={'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()

在这里插入图片描述


参考文章:
https://blog.csdn.net/hustlei/article/details/122408199?spm=1001.2014.3001.5502
https://blog.csdn.net/sjjsaaaa/article/details/111052306
https://blog.csdn.net/qq_52057693/article/details/121464137
https://zhuanlan.zhihu.com/p/113657235

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/125062.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配电房能源监测系统

配电房能源监测系统是一种能够实时监测和管理配电房能源消耗的系统&#xff0c;有助于企业更好地管理能源使用&#xff0c;降低能源成本&#xff0c;提高能源利用效率。本文将详细介绍配电房能源监测系统的组成、功能和优点。 一、配电房能源监测系统的组成 配电房能源监测系统…

网络通信深入解析:探索TCP/IP模型

http协议访问web 你知道在我们的网页浏览器的地址当中输入url&#xff0c;未必是如何呈现的吗&#xff1f; web浏览器根据地址栏中指定的url&#xff0c;从web服务器获取文件资源&#xff08;resource&#xff09;等信息&#xff0c;从而显示出web页面。web使用HTTP&#xff08…

OpenHarmony 使用 ArkUI Inspector 分析布局

● 摘要&#xff1a;视图的嵌套层次会影响应用的性能&#xff0c;开发者应该移除多余的嵌套层次&#xff0c;缩短组件刷新耗时。本文会介绍如何使用 ArkUI Inspector 工具分析布局&#xff0c;提示应用响应性能。 ● 关键字&#xff1a;列举本文相关的关键字&#xff1a;OpenH…

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…

Mavan进阶之多模块(聚合)

文章目录 Maven 多模块&#xff08;聚合&#xff09;非父子关系的多模块项目 Maven 多模块&#xff08;聚合&#xff09; Maven 继承和聚合是 2 个独立的概念。工程与工程之间可能毫无关系&#xff0c;也可能是继承关系&#xff0c;也可能是聚合关系&#xff0c;也可能既是继承…

美客多选品趋势分析,美客多选品时的注意事项

都知道选品的重要性&#xff0c;美客多这个平台也一样&#xff0c;选品选对了肯定事半功倍&#xff0c;本文介绍了美客多选品趋势分析&#xff0c;美客多选品时的注意事项&#xff0c;一起来了解下吧。、 美客多选品趋势分析 1、墨西哥站&#xff1a;跨境支付高&#xff0c;偏…

CSS---flex布局

主要记录flex布局的要点以及实例 flex flex父标签的6个属性flex-direction: flex布局的方向flex-wrap: 是否可以换行flex-flow: flex-direction 和 flex-wrap 一起写justify-content&#xff1a;横向对齐方式align-items: 纵向对齐方式align-content: 有换行情况下的纵向对齐方…

【MySQL系列】MySQL的事务管理的学习(一)_ 事务概念 | 事务操作方式 | 事务隔离级别

「前言」文章内容大致是MySQL事务管理。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、事务概念二、事务的版本支持三、事务提交方式四、事务常见的操作方式4.1 事务正常操作4.2 事务异常验证 五、事务隔离级别5.1 查看与设置隔离性5.2 读未提交&…

jmeter 准确的吞吐量定时器 Precise Throughput Timer

准确的吞吐量定时器使用实例 提取码&#xff1a;gpex&#xff1a; 说明&#xff1a;配置10个线程&#xff0c;每个线程请求200次&#xff0c;通过准确地的定时器模拟QPS为20的场景 配置测试接口参考链接 配置jmeter测试脚本&#xff0c;主要关注准确的吞吐量定时器参数配置 目…

OpenCV(二十六):边缘检测(二)

目录 1.Laplacian算子边缘检测 原理&#xff1a; Laplacian边缘检测函数Laplacian() 示例代码&#xff1a; 2.Canny算子边缘检测 原理&#xff1a; Canny算法函数Canny() 示例代码&#xff1a; 1.Laplacian算子边缘检测 原理&#xff1a; Laplacian算子的原理基于图像…

uniapp分包 解决分多个包的问题

1. 分包可以分很多个, 但是在"optimization": { "subPackages": true } 里面只能写一个, 2. 想分多个包 , 在 pages.json 里面 的 subPackages 里面继续加 第三个 第四个即可 3. 保存之后 创建页面就可以看见多个包了

固定资产台账怎么管理

固定资产台账是指企业对固定资产进行登记、分类、统计和管理的账簿。云呐固定资产管理系统是一款专业的固定资产管理软件&#xff0c;可以帮助企业实现资产全生命周期管理&#xff0c;包括资产采购、入库、领用、归还、维修、报废等环节。系统具有实时监控、预警提醒、报表分析…

java+ssm+mysql水费管理系统

项目介绍&#xff1a; 使用javassmmysql开发的用户水费管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理、用户管理、用水管理&#xff08;用水记录、缴费提醒&#xff09;、水费…

06 科技英语|控制与优化学科词汇

maneuver n 策略&#xff1b;v 操控、调遣 manipulate vt 熟练控制 scalability n 可扩展性 leverage n 杠杆&#xff1b;v 促使...改变 flexibility n 弹性 dispatch n 急件&#xff1b;v 调度&#xff1b;派遣 leverage …

流程图用什么软件做比较好?这几个实用软件了解下

流程图用什么软件做比较好&#xff1f;流程图的制作对于企业管理、项目管理、产品设计等领域都非常重要。制作流程图可以帮助我们更好地理解事物之间的关系和流程&#xff0c;从而规划和组织工作。因此&#xff0c;选择一个合适的流程图软件是非常必要的。下面就给大家介绍几种…

网络层重点协议-IP协议(结构分析)

IP协议数据报格式 一.4位版本号 用来表示IP协议的版本&#xff0c;现有的IP协议只有两个版本IPv4和IPv6 二.4位首部长度 IP协议数据报报头的长度 三.8位服务类型 3位优先权字段&#xff08;已经弃用&#xff09;&#xff0c;4位TOS字段&#xff0c;和1位保留 字段&#xff08;必…

欧洲云巨头OVHcloud收购边缘计算专家 gridscale

边缘计算社区近日获悉&#xff0c;欧洲云巨头OVHcloud已进入全面收购德国公司 gridscale 的谈判&#xff0c;该公司是一家专门从事超融合基础设施的软件提供商。 此次战略收购将标志着 OVHcloud 的另一个重要里程碑&#xff0c;使该集团能够显着加速其地理部署&#xff0c;并进…

Java连接websocket优雅断线、重连功能

为了实现优雅重连和重试&#xff0c;您需要在代码中添加一些逻辑来处理连接失败或断开连接的情况。 实现代码如下&#xff1a; import javax.websocket.*; import java.io.IOException;ClientEndpoint public class WebSocketClientEndpoint {private Session userSession n…

创邻科技图数据库课程走进一流高校

《图数据库原理和实践》 正式开课&#xff01; 最近&#xff0c;浙江大学计算机学院新开了一门名为 《图数据库原理和实践》 的新课程&#xff0c;该课程由创邻科技和浙江大学联合推出&#xff0c;吸引了许多学生踊跃参与&#xff01; 曾为浙大学子的创邻科技CTO周研博士作为…

代码审查和合并请求:团队合作中的关键

在现代软件开发中&#xff0c;团队合作是不可或缺的一部分。为了确保代码质量、减少错误以及促进知识共享&#xff0c;代码审查和合并请求成为了开发团队中的关键实践。在本文中&#xff0c;我们将深入探讨代码审查和合并请求的重要性、流程以及最佳实践。 代码审查的重要性 …