当前位置: 首页 > news >正文

matplotlib常用操作

文章目录

  • 1 matplotlib绘图
    • 1.1 绘图步骤
  • 2 matplotlib基本元素
    • 2.1 matplotlib 画布
    • 2.2 设置坐标轴长度和范围
    • 2.3 设置图形的线型和颜色
    • 2.4 设置图形刻度范围、刻度标签和坐标轴标签等
      • 2.4.1 设置刻度范围
      • 2.4.2 设置坐标轴刻度
    • 2.5 文本标签图例
  • 3 matplotlib的ax对象绘图
  • 4 绘制子图
  • 5 中文字体显示
  • 6 定性数据可视化
    • 6.1 条形图
    • 6.2 帕累托图
    • 6.3 饼图
    • 6.4 环形图
  • 7 定量数据可视化
    • 7.1 直方图
    • 7.2 折线图
    • 7.3 散点图

1 matplotlib绘图

在此只简单介绍matplotlib一些常用操作,当作小字典工具使用就可,具体详细内容请转到matplotlib中文网

​ 在使用扩展库matplotlib进行数据可视化之前,首先导入必要的工具包。

import numpy as np  # matplotlib 依赖numpy库
import matplotlib.pyplot as plt

​ 这样,后面的代码使用plt表示类似MATLAB的pyplot模块。此外,若希望代码能够访问全部matplotlib函数集合,也需要导入matplotlib库。

 import matplotlib as mpl

1.1 绘图步骤

  1. 创建画布(figure),相当于绘画前准备图纸。

  2. 根据需要在画布上创建一个或多个绘图区域。可以在一张画布上绘制一个图形,也可以将画布分成部分,在每个组成部分分别绘制相同或不同的图形。图形的不同组成部分拥有各自独立的坐标系。

  3. 在选定的区域描绘点、线、图形等。

  4. 为绘图线或坐标轴添加刻度、范围及修饰标签等,使得图形容易理解,更具表现力。

  5. 根据需要为图形添加其他信息,如:旋转标签、添加图例和标题等。

  6. 保存或显示绘图结果。

import numpy as np
import matplotlib.pyplot as plt# 创建画布
plt.figure()# 生成数据
data = [1,2,3,4,5]# 可视化结果
plt.plot(data)
plt.show()

在这里插入图片描述

2 matplotlib基本元素

在这里插入图片描述

​ 扩展库matplotlib中基本元素之间呈层级关系。画布上可以创建多个绘图区域,因此画布fig内可以包含多个子图ax ;其中每一个子图拥有自己的数据data、标题title以及包括横轴xaxis和纵轴yaxis的坐标系;每个坐标轴包含单独的刻度tick和坐标轴标签label;刻度tick还可以拥有自己的刻度标签tick label,刻度标签tick label是根据实际需要,为刻度赋予的有意义名字。

2.1 matplotlib 画布

​ 用户绘制的matplotlib图形位于画布上,可以通过plt.figure()函数创建画布。格式∶

plt.figure([num,figsize,dpi,facecolor,edgecolor,frameon])# 参数num:指定图形编号或名称,数字表示图形编号,字符串表示图形名称;
# 参数figsize:指定画布的宽和高,单位为英寸,1英寸等于2.5厘米;
# 参数dpi:指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80,A4纸是21*30cm的纸张;
# 参数facecolor: 指定画布背景颜色;
# 参数edgecolor:指定画布边框颜色;
# 参数frameon; 指定是否显示画布边框;
plt.figure('fig1',figsize=(10, 5))# 生成一组数据
x = np.random.randn(50)
y = x ** 4# 可视化结果
plt.scatter(x, y)
plt.show()

在这里插入图片描述

plt.figure('fig2',figsize=(15, 5),facecolor='purple',frameon=True) # 创建画布
random_data = np.random.randn(100)  # 生成数据
plt.plot(random_data)  #绘制图形
plt.show() # 可视化结果

在这里插入图片描述

2.2 设置坐标轴长度和范围

​ 可以调用plt.axis()函数设置x轴和y轴的属性值

plt.axis() #默认的坐标轴范围

在这里插入图片描述

ax=[-1,1,-100,100]
plt.axis(ax) #重新设置坐标轴范围
plt.show() # 可视化结果

在这里插入图片描述

plt.axis(ymax=20) #单独设置y轴 另外还有 xmin xmax ymin

在这里插入图片描述

2.3 设置图形的线型和颜色

​ matplotlib绘图时,可以设置线条的颜色、线宽、点标记等线条风格,满足用户的个性化绘制需求。若使用plt.plat(函数绘图,可以设置相关参数值确定图形的线型和颜色。

plt.plot([x], y,[fmt])# 参数x和y:分别表示绘制在横轴和纵轴上的数据;
# 可选参数fmt:以一个字符串来定义图的基本属性,如:颜色( color ),点型( marker ),线型( linestyle)具体形式为“fmt = '[color][marker][line]"”,分别表示图形“颜色、点标记和线型”的样式。
x = np.random.randn(50)
y = x * 2
plt.plot(x,y,color='blue', marker='*', linestyle='dashed', linewidth=1, markersize=6)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4 设置图形刻度范围、刻度标签和坐标轴标签等

​ 与数据本身相比,使用图形可以直观地表达出更多实际意义。为了提供更多图形信息,可以在图形中加入许多配置,如坐标刻度、刻度标签和网格等。在为用户提供可视化数据分析的同时,展示了更丰富的图形信息。这里使用plt模块的相关函数设置图形刻度范围、刻度标签和坐标轴标签。

2.4.1 设置刻度范围

​ 如果用户没有设置坐标轴的范围,那么matplotlib默认按照数据的范围自动选择它认为最合适的区间来展示所有的数据。

​ 若系统产出的数据范围并不是自己想要的,用户可以使用xlim()ylim()函数分别设置x轴、y轴的刻度显示范围,调用格式分别为:plt.xlim(xmin, xmax)plt.ylim(ymin, ymax)。其中参数xmin和ymin分别表示x轴和y轴刻度的最小值;参数xmax和ymax分别表示x轴和y轴刻度的最大值。

x = np.linspace(5,10,100)
y = np.random.rand(100)plt.plot(x,y)plt.xlim(4,11) # 设置x轴范围
plt.ylim(-0.2,1.2)     # 设置y轴范围
plt.show()"""
代码段中,首先调用np.linspace(5,10,100)生成[5,10]范围内的100个数据并赋值给变量x,调用np.random.rand(100)生成[0,1)范围内的100个数据并赋值给变量y,然后设置x轴刻度范围[4,11]可视化显示变量x,其取值范围[5,10];设置y轴刻度范围[-0.2,1.2]可视化显示变量y,其取值范围[0,1)。
"""

在这里插入图片描述

2.4.2 设置坐标轴刻度

xticks()yticks()函数分别设置x轴、y轴的刻度值,增加图形的可读性,它们的语法格式分别为:xticks(locs, [labels])yticks(locs, [labels])

​ 其中参数locs表示x轴或y轴刻度线上显示刻度标签的位置,即放置刻度值的地方,locs参数为数组参数(array like, optional),包含刻度的范围值和个数等信息;可选参数labels表示在参数locs设置的相应位置需要添加的标签名称,为数组参数,允许使用文本作为刻度标签。

​ 此外,plt.xticks()和plt. yticks()函数还可以使用参数fontsize设置刻度的字体大小,使用参数rotation设置刻度旋转的度数值等。

x = np.random.randn(100)
y=x.cumsum()
plt.plot(y)   # cumsum() 累加和
# 设置x轴的刻度
plt.xticks(np.linspace(0,100,5),list('abcde'),fontsize=15)
# 设置y轴的刻度
plt.yticks(np.linspace(-10,20,3),['max','min',0],fontsize=15,rotation=60)

在这里插入图片描述

x = np.linspace(0,10,100)
y = np.random.rand(100)fig, ax = plt.subplots(1)
ax.plot(x,y, label='line1')  # 设置刻度
ax.set_xlim([-1, 11])
ax.set_ylim([-0.2, 1.2])# 设置显示的刻度
ax.set_xticks([0, 2, 4, 6, 8, 10])
ax.set_yticks([-0.2, 0, 0.2, 0.4, 0.6, 0.8,1.0,1.2])
# 设置刻度标签
ax.set_xticklabels(['x_0', 'x_2', 'x_4', 'x_6', 'x_8', 'x_10'])# 设置坐标轴标签
ax.set_xlabel('Number')
ax.set_ylabel('Random')

在这里插入图片描述

2.5 文本标签图例

legend()函数标识图形中不同变量的文本标签图例,语法格式示例: plt.legend(loc='lower left'),其中参数loc指定图例在图形中的位置。选择合适的位置,可以避免图例覆盖图表内容。loc参数取值如表所示。

在这里插入图片描述

# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()plt.figure()plt.plot(data1)
plt.plot(data2)
plt.plot(data3)plt.show()

在这里插入图片描述

plt.figure()# 设置刻度范围
plt.xlim([0,500])# 设置显示的刻度
plt.xticks([0, 100, 200], ['x1', 'x2', 'x3'])# 设置坐标轴标签
plt.xlabel('Number')
plt.ylabel('Random')# 设置标题
plt.title('Example')# 图例
plt.plot(data1, label='line1')
plt.plot(data2, label='line2')
plt.plot(data3, label='line3')plt.legend(loc='best')
plt.show()

在这里插入图片描述

3 matplotlib的ax对象绘图

​ 使用扩展库matplotlib绘制图形时,首先使用figure函数创建画布,然后图形的绘制操作可以使用plt模块的相关函数完成。实际上,使用画布中坐标对象ax的相关方法同样可以实现整个图形的绘制过程。

​ 分别使用plt模块和ax对象绘图,结果相同。二者的区别在于: plt.plot()函数首先创建一个figure对象,然后在这个画布隐式生成的画图区域上绘图;而ax.plot()方法同时生成了fig对象和ax对象,然后使用ax对象在其区域上绘图。

import matplotlib.pyplot as plt 
import numpy as np
x=np.arange(1,10)
y=x**2#plt.plot()
plt.figure()
plt.plot(x,y)  
plt.show() #ax.plot()
fig,ax=plt.subplots()
ax.plot(x,y)
plt.show()

在这里插入图片描述

​ 可以使用ax对象的set_xticks()set_yticks()方法设置坐标轴刻度值,使用ax对象的set_xticklabels(),set_yticklabels()方法设置刻度标签等等。

x = np.random.randn(100)
ax = plt.subplot(111)
ax.plot(x.cumsum())
'''设置x轴和y轴刻度值'''
ax.set_xticks([0,25,50,75,100])
ax.set_yticks([-10,-5,0,5,10])
'''设置刻度标签'''
ax.set_xticklabels(list('abcde'))
plt.show()

在这里插入图片描述

# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()fig, ax = plt.subplots(1)
ax.plot(data1, label='line1')
ax.plot(data2, label='line2')
ax.plot(data3, label='line3')# 设置刻度
ax.set_xlim([0, 800])# 设置显示的刻度
ax.set_xticks([0, 100, 200, 300, 400, 500])# 设置刻度标签
ax.set_xticklabels(['x1', 'x2', 'x3', 'x4', 'x5'])# 设置坐标轴标签
ax.set_xlabel('Number')
ax.set_ylabel('Random')# 设置标题
ax.set_title('An example of ax drawing')# 图例
ax.legend(loc=0)
plt.show()

在这里插入图片描述

4 绘制子图

​ 使用扩展库matplotlib绘图,其中Axes对象代表画布中的一片区域。当使用plt模块绘图时,Axes对象是隐式生成的,因此只需要在画布上绘制一个图形就可以,无须显式生成Axes对象,这时使用plt.plot()函数完成图形绘制是比较方便的。

​ 如果需要在一个图中绘制多个子图,通常使用ax对象绘图:首先显式调用 plt.subplot()函数,使用生成的fig对象和ax对象分别对画布Figure和绘图区域Axes进行控制,然后使用ax对象对各个子图执行更多的操作。显然,使用ax对象实现多个子图的绘制更方便且易于解释。因此,在实际绘图,特别是绘制多个子图时,推荐使用ax对象完成。

​ 扩展库matplotlib.pyplot中的subplot()函数可以划分绘图区域并创建子图,其语法格式及重要参数如下:

subplot(numbRow, numbCol, plotNum)或者:subplot(numbRow numbCol plotNum)# 参数numbRow:表示绘图区域中子图的行数;
# 参数numbCol:表示绘图区域中子图的列数;
# 参数plotNum:指定Axes对象所在的绘图区域;
# 此外,subplot函数中可以使用可选参数设置图形的更多属性,例如∶参数facecolor可以设置当前子图的背景颜色;参数polar设置当前子图是否为极坐标图,默认为False;参数sharex.sharey设置与哪个子图共享x轴或y轴坐标使得共享轴坐标的子图具有相同的起止范围、刻度和缩放比例。

​ subplot函数的返回值包括一个绘图区( figure )和一系列Axes实例对象组成的数组,将整个绘图区域划分为numRows 行和numCols 列个子区域,按照从左到右,从上到下的顺序对每个子区域依次编号。用户可以方便地访问每一个Axes对象,绘制并独立配置每一个子图。例如:函数subplot(2,2,1)表示此figure代表的绘图区域划分成2*2个子区域,也就是共有4个子图,其中1代表第一幅图所在的子区域,即左上方的子区域编号为1,也可以写成subplot(221)

fig, subplot_arr = plt.subplots(2, 2, figsize=(8, 8),sharex=True)
data = np.random.randn(20)
subplot_arr[0, 0].plot(data, 'r.--')
subplot_arr[0, 1].plot(data, 'gv:')
subplot_arr[1, 0].plot(data, 'b<-')
subplot_arr[1, 1].plot(data, 'ys-.')

在这里插入图片描述

在这里插入图片描述

​ 如果绘制的图形包含3幅或者5幅子图的话,需要对编号较大的子区域进行重新排列。例如:当绘制一幅包含三个子图的图形时,如果将整个绘图区域按照2*2划分,那么前两个子区域分别是(2,2,1)和(2,2.2),第三个子图需要占用(2,2, 3)和(2,2,4)这两个子区域,因此需要再次使用subplot函数对这个子区域按照2*1重新划分,使得前两个子图占用(2,1,1)的位置,第三个子图占用(2,1,2)的位置。

plt.figure(figsize=(6,6), dpi=80,facecolor='lightcyan')
plt.figure(1)
ax1 = plt.subplot(221)
ax1.plot(data, color="red",linestyle = "--")ax2 = plt.subplot(222)
ax2.plot(data,color="blue",linestyle = "-")ax3 = plt.subplot(212)
ax3.plot(data,color="green",linestyle = "-.")

在这里插入图片描述

5 中文字体显示

使用matplotlib绘制的图形中显示中文时经常出现乱码问题。这是因为扩展库matplotlib默认安装和使用的“sans-serif”字体并不支持中文显示,当用户将图形标题、标签或图例设置为中文字符串的时候,这些中文字体无法正常显示出来。

​ 使用 matplotlib的font_manager工具,主要由三个步骤组成:

  • 首先导入font_manager模块
  • 找到中文字体在电脑中的位置 (常在C盘),导入中文字体库
  • 接着根据绘图时中文字体出现的不同位置,采取适当的解决方案:
    • 若在图例中出现中文字体,设置legend函数的prop属性
    • 若在标题和横坐标等地方出现中文,设置对应函数的fontproperties属性
    • 若需要显示希腊字母,采用latex格式,即使用双“$…$”符号。
# 生成数据
data1 = np.random.randn(1000).cumsum()
data2 = np.random.randn(1000).cumsum()
data3 = np.random.randn(1000).cumsum()# 导入库
import matplotlib.font_manager as fm  
#定位中文字体文件
zhfont1 = fm.FontProperties(fname="中文字体路径", size=15)plt.figure()
plt.plot(data1, label='线条1')
plt.plot(data2, label='线条2')
plt.plot(data3, label='线条3')# 设置刻度
plt.xlim([0, 700])# 设置刻度标签:中文字体
plt.xticks((100, 200, 300, 400, 500,600),('一', '二', '三', '四', '五','六'),fontproperties=zhfont1)# 设置坐标轴标签:中文字体
plt.xlabel('数据个数',fontproperties=zhfont1)
plt.ylabel('随机数',fontproperties=zhfont1)# 设置中文标题
plt.title('中文字体显示',fontproperties=zhfont1)# 图例
plt.legend(loc='upper left',prop=zhfont1)

6 定性数据可视化

6.1 条形图

​ 条形图或柱状图适用于中小规模的二维数据集,且只有一个维度的数据需要进行比较的情况。条形图是用宽度相同条形的高度或长短来表示数据变动的图形。绘制条形图时,各类别可以放在纵轴,称为条形图,也可以放在横轴,称为柱状图。条形图有单式、复式等形式。

​ 扩展库matplotlib.pyplot中的函数bar()可以根据给定的数据绘制条形图或柱状图,其语法格式及重要参数如

bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwaras)# 参数left: 指定每根柱子的横坐标
# 参数height: 指定每根柱子的高度,即待比较数据的统计值
# 参数width: 指定每根柱子的宽度,默认为0.8
# 可选参数bottom:指定每根柱子底部边框的y坐标值
# 可选参数color:指定每根柱子的颜色,可以指定一个颜色值,使所有柱子呈现相同颜色,也可以指定包含不同颜色值的列表,使柱子呈现不同颜色
# 可选参数edgecolor:指定每根柱子边框的颜色
# 可选参数linewidth:指定每根柱子边框的宽度,默认值为“无边框”
# 可选参数align: 指定每根柱子的对齐方式,以柱状图为例: 参数align='edge且width>0表示柱子左侧边框与给定的横坐标对齐;参数align='edge且width<0表示柱子右侧边框与给定的横坐标对齐;align='center"表示给定的横坐标对齐柱子的中间位置;
#可选参数orientation : 设置柱子的显示方式当orientation='vertical'时绘制柱状图;当orientation='horizontal时绘制条形图,不建议通过设置此参数绘制条形图,通常使用函数barh(绘制条形图
# 可选参数alpha:设置透明度
# 可选参数antialiased :设置是否启用抗锯齿功能
# 可选参数fill : 设置是否填充
# 可选参数hatch : 指定内部填充符号,可选值有'/' '|' '-' '+' 'x' 'o' 'O' '.' '*'
# 可选参数label: 指定图例中显示的文本标签
# 可选参数linestvle:指定边框的线型
# 可选参数visible:设置绘制的柱子是否可见
import numpy as np
import matplotlib.plot as plt
# 准备数据
x = np.arange(10)
y = x**2plt.figure()
plt.bar(x,y)# 设置坐标轴标签
plt.xlabel('x')
plt.ylabel('y',rotation = 0)plt.plot()
plt.show()

在这里插入图片描述

x1 = [1, 3, 5, 7, 9, 11, 13] # 多组数据
y1 = [5, 3, 7, 8, 2,6,4]
plt.bar(x1, y1, color='b',label='data1')x2 = np.array(x1) + 0.8  # 需要设置不同的横坐标,避免重叠
y2 = [8, 6, 2, 5, 6,9,7]
plt.bar(x2, y2, color='y',label='data2') #复式条形图plt.xlim([0,15]) # 设置刻度范围# 设置显示的刻度
plt.xticks([1, 3,5,7,9,11,13], ['x1', 'x2', 'x3', 'x4', 'x5','x6', 'x7'])
plt.xlabel('Type')  # 设置坐标轴标签
plt.ylabel('Frequency')
plt.title('Double bar chart')  # 设置标题
plt.legend(loc='best')
plt.show()

在这里插入图片描述

6.2 帕累托图

该图是按照各类别数据出现的频率高低排序后绘制的条形图。通过对条形图的排序,很容易看出哪类数据出现得多,哪类数据出现得少。

x = [1, 2, 3, 4, 5, 6,7]  # 单组数据
data = [5,3,7,8,2,9,4]
data1=sorted(data,reverse=True)	# 对数据进行排序
plt.bar(x,data1) # 帕累托图plt.xlim([0,8]) # 设置刻度范围
plt.xticks([1,2,3,4,5,6,7], ['x6','x4','x3','x1','x7','x2','x5'])
plt.xlabel('Type')  # 设置坐标轴标签
plt.ylabel('Number')
plt.title('Pareto chart')  # 设置标题
plt.show()

在这里插入图片描述

6.3 饼图

​ 饼图是用圆形及圆内扇形的角度来表示数值大小的图形,主要用于表示一个样本( 或总体 ) 中各组成部分的数据占全部数据的比例,对于研究结构性问题十分有用。

扩展库matplotlib.pyplot中的函数pie0可以根据给定的数据绘制饼图,其语法格式及重要参数如下

pie(x,explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,shadow=Falsestartanale=None,labeldistance=1.1,radius=None,counterclock=True,wedaeprops=Nonetextprops=None, center=(0,0), frame=False, hold=None, data=None)# 参数x:取值为数据序列,自动计算每个数据的百分比并确定对应的扇形面积;
# 参数explode:取值为None或与x等长的数据序列,用于指定每个扇形沿半径方向偏离圆心的距离,取值为None表示无偏移,正数表示远离圆心
# 参数colors: 取值None或元素为颜色值的数据序列,指定每个扇形的颜色,如果颜色值序列长度小于扇形数量则循环使用颜色值
# 参数labels: 与x长度相同的字符串序列,用于指定每个扇形对应的文本标签
# 参数autopct: 设置扇形内部标签的显示格式,一般为一个格式化字符串
# 参数pctdistance:设置每个扇形中心与autopct指定文本的距离,默认值为0.6
# 参数labeldistance:设置每个饼标签与圆心的径向距离,1.1表示1.1倍半径
# 参数shadow: 布尔类型的数据,设置是否显示阴影,默认值为False
# 参数startangle: 设置饼图中第一个扇形的起始角度,沿x轴逆时针方向计算,默认值为0
# 参数radius: 设置饼的半径,默认值为1
# 参数counterlock:布尔类型的数据,设置饼图中每个扇形的绘制方向
# 参数center: 形式为(xv)的组数据,设置饼的圆心位置 
# 参数frame: 布尔类型的数据,设置是否显示边框。
data = np.arange(5) + 1	# 准备数据 1 2 3 4 5labels = ['1','2','3','4','5']
explode = (0,0,0,0,0.1)plt.pie(data,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False)plt.title('12345')
plt.axis('equal') # 设置饼状图为圆形  否则略椭圆
plt.legend(loc="best",fontsize=10,bbox_to_anchor=(1.2,0.05),borderaxespad=0.3)
# bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边
# ncol=2 分两列
# borderaxespad = 0.3 图例的内边距
plt.show()

在这里插入图片描述

6.4 环形图

​ 饼图只能显示一个样本中各部分所占的比例。如果需要展示多个样本的构成比例,可以把多个饼图叠加在一起,挖去中间的部分,这就形成了环形图。环形图中间有一个“空洞”,每个样本用一个环来表示。样本中的每一部分数据用环中的每一段来表示。因此,环形图可以显示多个样本各部分所占的相应比例,有利于展示构成的比较研究结果。

扩展库matplotlib.pyplot中的函数pie()除了绘制饼图,也可以绘制环形图,与之相关的主要参数及含义如下

# 参数radius:设置圆环的半径,据此区分不同的圆环
# 参数pctdistance:设置每个扇形中心与autopct指定文本的开始位置
# 参数textprops:设置标签文本的颜色,其值为字典类型数据
# 参数wedqeprops:设置环形的宽度和边框颜色,其值为字典类型数据
#不同年份的家庭支出构成比较研究labels1 = ['amusement','education','diet','mortgage',' transportation','others']
sizes3 = [16,12,22,33,8,9]
sizes2 = [10,15,18,40,8,9]
sizes1 = [8,12,15,50,6,9]
colors=('blue','red','green','orange','gray','cyan')
explode = (0,0,0,0,0,0) plt.figure()
plt.pie(sizes3, explode=explode, radius=1.3, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.pie(sizes2, explode=explode, radius=1.0, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.pie(sizes1, explode=explode, radius=0.7, autopct='%1.0f%%',pctdistance=0.85,colors=colors, shadow=False, startangle=170,wedgeprops={'width':0.3,'edgecolor':'w'})
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.plt.title("Demo")
plt.legend(loc="best",labels=labels1,fontsize=10,bbox_to_anchor=(1.05,0.05),borderaxespad=0.2,prop=proptease)
plt.show()

在这里插入图片描述

7 定量数据可视化

7.1 直方图

​ 按照某种标准分组后的数值型数据,可以使用直方图呈现。直方图是用于展示连续型数据分布特征的统计图形,它用矩形的宽度和高度(即面积)表示频数分布。在平面直角坐标系中,用横轴表示数据分组,纵轴表示频数或频率这样,每个数据分组与相应的频数就形成了一个矩形,即直方图。

​ 条形图与直方图区别:

  • 条形图是用条形的长度(横置时)表示各类别频数的多少,宽度( 表示类别 )是固定的;直方图是用面积表示每个分组频数的多少矩形的高度表示每组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
  • 条形图各矩形是分开排列的;由于分组数据具有连续性,直方图的各矩形通常是连续排列。
  • 条形图主要用于展示分类数据;直方图主要用于展示数值型数据

扩展库matplotlib.pyplot中的hist()函数可以根据给定的数据绘制直方图,其语法格式及重要参数如下:

hist(x, bins=None, range=None, density=None, bottom=None, histtype='bar', align='mid', log=Falsecolor=None, label=None, stacked=False, normed=None)# 参数x: 数据集,最终的直方图将对该数据集进行统计
# 参数bins: 指定分组个数或分组边界,除了最后一组,其余分组有开放的边界,如:[1,2,3,4]的对应区间为[1,2)、[2,3)和[3,4]
# 参数range: 元组类型的数据,指定直方图中显示的数据区间,默认包含绘图数据的最大值和最小值,参数range在没有给出bins时生效
# 参数density: 布尔型数据,默认取值False,显示频数统计结果,当取值True显示频率统计结果,频率统计结果=区间数目/(总数*区间宽度)
# 参数histtype:指定直方图类型,取值可选{}'bar','barstacked','step','stepfilledy'}之一,默认值为bar,推荐使用默认配置;取值step表示梯状;取值stepfilled将对梯状内部填充,效果与bar类似
# 参数align:取值可选(left,mid,right)之一,默认值为mid,控制直方图的水平分布;取值若为left或者right,会有部分空白区域,推荐使用默认值;
# 参数orientation: 设置直方图的摆放方向,默认值为vertical,表示垂直方向;
# 参数log:布尔型数据,默认值为False,用于设置y轴是否选择指数刻度;
# 参数stacked:布尔型数据,默认值为False,设置是否绘制为堆积状图。
x = np.random.randn(1000)  # 1000个正态分布的数据
bins = np.around(np.linspace(min(x), max(x), 10,endpoint=True),2)h = plt.hist(x, bins=bins, color='navy', edgecolor='white',alpha=0.5)
plt.xlabel('value',)
plt.ylabel('frequency', rotation='horizontal',y=1)
plt.xticks(bins, bins)plt.grid(axis='y',linewidth=0.5,linestyle='--') # 网格线
plt.show()

在这里插入图片描述

7.2 折线图

​ 时间序列数据通常指在不同时间取得的数值型数据。折线图比较适合刻画多组数据随时间变化的趋势,或描述一组数据对另一组数据的依赖关系。绘制折线图时,时间一般放在横轴,观测值一般放在纵轴,可以形成横轴略大于纵轴的长方形,长宽比例大致为10:7。图形过扁或过瘦,容易让人产生视觉上的错觉,不便于对数据变化的理解。通常情况下,纵轴数据下端从“0”开始;如果数据与“0的差距过大,可以在纵轴上使用折断符号表示。

​ 扩展库matplotlib.pyplot中的plot()函数可以根据给定得数据绘制折线图,其语法格式如下:

plot(*args,scalex=True,scaley=True,data=None,**kwargs)

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as pltx = np.arange(10)
y = np.random.randint(0,100,10)plt.figure()
plt.title('An example of line chart',fontsize = 20)
plt.xlabel('x',fontsize=15)
plt.ylabel('y',fontsize=15)plt.plot(x,y,color='darkblue',linewidth=2,linestyle='-',label='x-y',marker='o')plt.legend(loc=0)
plt.show()

在这里插入图片描述

7.3 散点图

​ 散点图是用二维坐标展示两个变量之间关系的图形。其中横轴代表变量x,纵轴代表变量y,每组数据在坐标系中用一个点来表示,n组数据在坐标系中形成的n个点称为散点,由坐标和散点形成的二维数据图称为散点图散点图比较适合描述数据在平面或空间中的分布和聚合情况,有助于分析数据之间的联系,例如:观察聚类算法的初始点选择和参数设置对聚类效果的影响等。

扩展库matplotlib.pyplot中的scatter0函数可以根据给定的数据绘制散点图,其语法格式如下:

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, *, data=None, **kwaras)
# 参数x,y:分别用于指定绘制散点的x轴、y轴输入数据,可以是标量或数组形式的数据
# 参数s:数值或一维数组,用于指定散点图中点的大小,若是一维数组,则表示散点图中每个点的大小
# 参数c: 字符串或一维数组,用于表示散点图中点的颜色,若是一维数组,则表示散点图中每个点的颜色,# 参数marker:字符串类型的数据,用于表示散点的类型
# 参数alpha : 0~1之间的小数,用于表示散点的透明度
# 参数edqecolors: 用于指定散点符号的边线颜色,可以是颜色值或包含若干颜色值的序列。
import numpy as np
import matplotlib.pyplot as pltx = np.arange(10)
y = np.random.randint(0,100,10)plt.figure(figsize=(10,5))#设置画布的尺寸
plt.title('An example of bubble chart',fontsize=20)#标题,并设定字号大小
plt.xlabel('x',fontsize=14)#设置x轴,并设定字号大小
plt.ylabel('y',fontsize=14)#设置y轴,并设定字号大小plt.scatter(x,y,s=100,color='deeppink',marker='o')
plt.legend(['y-x'])
plt.show()

在这里插入图片描述

相关文章:

matplotlib常用操作

文章目录1 matplotlib绘图1.1 绘图步骤2 matplotlib基本元素2.1 matplotlib 画布2.2 设置坐标轴长度和范围2.3 设置图形的线型和颜色2.4 设置图形刻度范围、刻度标签和坐标轴标签等2.4.1 设置刻度范围2.4.2 设置坐标轴刻度2.5 文本标签图例3 matplotlib的ax对象绘图4 绘制子图5…...

二分算法题

文章目录一、在排序数组中查找数字二、0~n-1中缺失的数字三、旋转数组的最小数字四、二维数组中的查找一、在排序数组中查找数字 题目传送门 法一&#xff1a;暴力解 直接遍历然后计数 法二&#xff1a;二分法求边界 看到关键字排序数组、有序数组&#xff0c;一定要想到二分…...

Vue+ElementUI+SpringBoot项目配合分页插件快速实现分页(简单暴力)

首先需要在项目中引入Element-UI的组件库&#xff0c;使用以下命令&#xff0c;不会引入的请自行百度。 npm i element-ui -S Element官网地址&#xff1a;https://element.eleme.cn/#/zh-CN/component/changelog 去Element-UI官网组件库找到合适的分页插件&#xff0c;并把他引…...

【回眸】牛客网刷刷刷!嵌入式软件中也会遇到的嵌入式硬件,通讯,通讯协议专题(一)

前言 最近继续刷题&#xff0c;看看嵌入式软件还需要了解一些嵌入式硬件中的通讯协议和常用接口协议 比如说SPI CAN I2C 通讯协议专题 1.波特率 波特率 每秒传送的字符数 * 字符位数。串口的工作模式为1个起始位&#xff0c;7个数据位&#xff0c;1个校验位&#xff0c;1个…...

使用Vue展示数据(动态查询)

学习内容来源&#xff1a;视频P4 本篇文章进度接着之前的文章进行续写 精简前后端分离项目搭建 Vue基础容器使用 目录选择组件修改表格组件修改分页组件增加后端接口前端请求数据接口页面初始化请求数据点击页码请求数据选择组件 在官方文档中选择现成的组件&#xff0c;放在页…...

构建数据库测试数据——mysql

建表脚本 -- 建表 CREATE TABLE test_table (id INT(11) NOT NULL AUTO_INCREMENT,varchar_col VARCHAR(50),char_col CHAR(10),text_col TEXT,tinyint_col TINYINT(4),smallint_col SMALLINT(6),mediumint_col MEDIUMINT(9),int_col INT(11),bigint_col BIGINT(20),float_col…...

你想要的Android性能优化系列:启动优化 !

App启动优化为什么要做App的启动优化&#xff1f;网页端存在的一个定律叫8秒定律&#xff1a;即指用户访问一个网站时&#xff0c;如果等待打开的时间超过8秒&#xff0c;超过70%的用户将会放弃等待。同样的&#xff0c;移动端也有一个8秒定律&#xff1a;如果一个App的启动时间…...

python3的基础入门3:基本数据类型

基本数据类型 python 中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。 在 Python 中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。 等号&#xff08;&…...

消息队列原理与实战-学习笔记

消息队列&#xff1a;保存消息的一个容器&#xff0c;本质是个队列&#xff0c;但是需要支持高吞吐、高并发、高可用。 1 前世今生 1.1 业界消息队列对比 Kafka:分布式的、分区的、多副本的日志提交服务&#xff0c;在高吞吐场景下发挥较为出色RocketMQ:低延迟、强一致、高性…...

Linux权限相关知识(大量图文展示,及详细操作)

Linux权限相关概念 Linux下有两种用户&#xff1a;一种是超级用户&#xff08;root&#xff09;、一种是普通用户。 超级用户&#xff1a;可以在linux系统下做任何事情&#xff0c;不受限制 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“#”&#xf…...

Ep_操作系统面试题-什么是协程

协程 是一种 比线程更加轻量级的存 在&#xff0c;一个线程可以拥有多个协程。是一个特殊的 函数 &#xff0c;这个函数可以在某个地方挂起&#xff0c;并且可以重新在挂起处外继续运行。协程 不是被操作系统内核所管理 &#xff0c; 而完全是由程序所控制&#xff08;也就是在…...

在C#中使用互斥量解决多线程访问共享资源的冲突问题

在阿里云上对互斥量的概述&#xff1a;互斥量的获取是完全互斥的&#xff0c;即同一时刻&#xff0c;互斥量只能被一个任务获取。而信号量按照起始的计数值的配置&#xff0c;可以存在多个任务获取同一信号量的情况&#xff0c;直到计数值减为0&#xff0c;则后续任务无法再获取…...

JavaEE进阶第六课:SpringBoot配置文件

上篇文章介绍了SpringBoot的创建和使用&#xff0c;这篇文章我们将会介绍SpringBoot配置文件 目录1.配置文件的作用2.配置文件的格式2.1 .properties语法2.1.1.properties的缺点2.2 .yml语法2.2.1优点分析2.2.2配置与读取对象2.2.3配置与读取集合2.2.4补充说明3.设置不同环境的…...

MySQL基础(一)SQL分类、导入、SELECT语句,运算符

目录 MySQL安装以及相关工具 SQL分类 导入数据 最基本的SELECT语句 SELECT FROM 列的别名 去除重复行 着重号 查询常数 描述表结构 过滤数据&#xff08;重要&#xff09; 运算符 算数运算符 比较运算符 符号运算符 非符号运算符 逻辑运算符 位运算符 MySQL安…...

反激与正激的区别

之前学习了正激开关电源&#xff0c;但是对于正激和反激一直不是很清楚&#xff0c;网上找了一篇&#xff0c;觉得感觉该可以&#xff0c;以此记录。正激和反激是两种不同的开关电源技术一、正激&#xff08;1&#xff09;概述正激式开关电源是指使用正激高频变压器隔离耦合能量…...

王道操作系统课代表 - 考研计算机 第四章 文件管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “文件管理” 章节知识点总结的十分全面&#xff0c;涵括了《操作系统》课程里的全部…...

前端开发规范,你真的了解吗?一起来学习一下前端开发规范,让你的代码高级起来!

代码规范 1 编码风格规范 1.1 使用ES6风格编码源码 定义变量使用let ,定义常量使用const 使用export &#xff0c;import 模块化 1.2 组件 props 原子化 提供默认值 使用 type 属性校验类型 使用 props 之前先检查该 prop 是否存在 1.3 避免 this.$parent 1.4 谨慎使用 …...

Licode—基于webrtc的SFU/MCU实现

1. webrtc浅析webrtc的前世今生、编译方法、行业应用、最佳实践等技术与产业类的文章在网上卷帙浩繁&#xff0c;重复的内容我不再赘述。对我来讲&#xff0c;webrtc的概念可以有三个角度去解释&#xff1a;&#xff08;1&#xff09;.一个W3C和IETF制定的标准&#xff0c;约定…...

开发运维工具推荐 --- 解决远程访问局域网服务的问题。开发调试推荐

一、FastNat 可为您解决的问题1. 没公网服务器&#xff0c;需要发布本地的站点或网络程序到公网上&#xff0c;供他人访问&#xff1b;此项功能大大方面开发人员进行远程调试&#xff0c;微信小程序等开发工作进行。2. 需要远程到在其他网络中的设备&#xff0c;但两处的网络不…...

【华为OD机试 】单词倒序(C++ Java JS Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++ 解法JavaScript算法源码Java算法源码Python解法题目描述 输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。 输入描述 输入字符串S,S的长度 1 ≤ N…...

PLC 诊断故障的基本原理

(1)东欢坨选煤厂机电设备故障信号主要取自开关量信号,PLC 通过开关量的通和断对设备进行故障诊断。PLC 对开关量的识别是通过输入模块来实现的。PLC 控制设备运行时,设备中的温度、压力、急停、跑偏、速度、过热以及各种按钮和行程开关的传感器与 PLC 输入模块相连接,输入模块的…...

QT打开外部程序并嵌入Qt子窗口的缺点

首先可以参考如下文章&#xff1a; QT打开外部程序并嵌入Qt界面_qt界面嵌入外部应用程序_初学小白Lu的博客-CSDN博客 Qt嵌入外部程序界面初探_qt嵌入其他程序窗口_liming4675的博客-CSDN博客 QT 如何把外部程序嵌入到QT界面_qt嵌入其他程序窗口_hellokandy的博客-CSDN博客 Qt界…...

如何系统地学习 C++ 语言?

C作为具有广泛适用性的编程语言&#xff0c;学习C的人越来越多&#xff0c;但是如何系统地学习C还是个问题&#xff0c;下面我们一起来看一下C学习的方法有哪些吧。 首先&#xff0c;要学习C&#xff0c;最重要的就是掌握C的基础知识。 比如数据结构、算法、微积分等。这些都是…...

【数据结构】单链表

链表1.为什么存在链表2.链表的概念3.单链表的实现4.测试1.为什么存在链表 我们在学习顺序表的时候&#xff0c;了解到顺序表有一定的缺陷&#xff1a;&#xff08;1&#xff09;在中间插入数据和删除数据需要挪动数据&#xff0c;时间复杂度是O&#xff08;N&#xff09;&…...

Windows 右键菜单扩展容器 [开源]

今天给大家分享一个我做的小工具&#xff0c;可以自定义扩展右键菜单的功能来提高工作效率&#xff0c;效果图如下&#xff1a; 如上图&#xff0c;右键菜单多了几个我自定义的菜单&#xff1a; 复制文件路径 复制文件夹路径 我的工具箱 <走配置文件动态创建子菜单&#x…...

爆文制造机!小红书热榜3个方向,告诉你选题诀窍!

我们知道&#xff0c;不论是达人创作内容&#xff0c;还是品牌制定Brief&#xff0c;都需要提前调研筛选海量信息&#xff0c;这时候如果有一个自己的内容素材库&#xff0c;就省事多啦。按照内容需求&#xff0c;我们可以按3个角度划分小红书内容素材&#xff1a;笔记类型、竞…...

【Web安全社工篇】——水坑攻击

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 以后赚大钱座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日鸡汤&#xff1a;努力赚钱不是因为爱钱“水坑攻击”&#xff0c;黑客攻…...

SpringBoot 整合 MongoDB 实现数据的增删改查!

一、介绍在 MongoDB 中有三个比较重要的名词&#xff1a;数据库、集合、文档&#xff01;数据库&#xff08;Database&#xff09;&#xff1a;和关系型数据库一样&#xff0c;每个数据库中有自己的用户权限&#xff0c;不同的项目组可以使用不同的数据库集合&#xff08;Colle…...

VUE前端常问面试题

文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题 1、MVC和MVVM 区别 MVC&#xff1a;MVC全名是 Model View Controller&#xff0c;即模型-视图-控制器的缩写&#xff0c;一种软件设计典范。 Model(模型)&#xff1a;是用于处理应用程序数据逻辑部分。通…...

c++中map/unordered_map的不同遍历方式以及结构化绑定

文章目录方式一&#xff1a;值传递遍历方式二&#xff1a;引用传递遍历方式三&#xff1a;使用迭代器遍历方式四&#xff1a;结构化绑定(c17特性)结构化绑定示例&#xff08;1&#xff09;元组tuple结构化绑定&#xff08;2&#xff09;结构体结构化绑定&#xff08;3&#xff…...

中国建设会计协会网站首页/学生制作个人网站

各种ESB产品比较 主流商业和开源ESB的发展趋势、可借鉴的地方和其缺点&#xff1a; 主要介绍&#xff1a;Oracle Service BusWebSphereMessageBrokerMuleServiceMix/FUSE ESBSynapse/WSO2 ESBESB产品一览表包括商业和开源&#xff1a; 类型产品公司商业Oracle Service Bus (OSB…...

珠海seo海网站建设/键词优化排名

操作系统&#xff1a;centos6.4X86_64数据库&#xff1a;oracle12cR1需要的安装包&#xff1a;rlwrap-0.37.tar.gz&#xff08;网上可下载&#xff09;readline-6.0-4.el6.x86_64.rpm&#xff08;镜像包&#xff09;readline-devel-6.0-4.el6.x86_64.rpm&#xff08;镜像包&…...

单位网站维护 网站建设岗位/seo顾问服务咨询

一、开关电源的电路组成开关电源的主要电路是由输入电磁干扰滤波器(EMI)、整流滤波电路、功率变换电路、PWM控制器电路、输出整流滤波电路组成。辅助电路有输入过欠压保护电路、输出过欠压保护电路、输出过流保护电路、输出短路保护电路等。开关电源的电路组成方框图如下&#…...

游戏运营备案官方网站/云盘搜

赋值语句的是内存地址引用&#xff0c;不是拷贝拷贝是导入copy包&#xff0c;分copy和deepcopy两种&#xff0c;即浅拷贝和深拷贝对于非嵌套数据 copy.copy 和 copy.deepcopy 没有区别 都会开辟新空间 存储数据有嵌套的数据 copy.copy没有办法保证数据的独立性,拷贝第一层的数据…...

沈阳建设工程信息网 等级中项网/企业网站seo哪里好

一、工具及壳介绍1.1、信息总结二、脱壳2.1、找到OEP2.2、解密IAT2.2.1、IAT加密分析2.2.2、重启程序2.2.3、IAT加密流程三、脱壳脚本的编写四、脱壳程序验证五、个人总结六、 附件一、工具及壳介绍 使用工具&#xff1a;Ollydbg、PEID、ImportREC、LoadPE、OllySubScript 1.1、…...

收不到 wordpress 邮件/百度订单售后电话

RDB文件格式一、Redis RDB文件二、解析RDB的高级算法2.1 Magic Number2.2 RDB 版本号2.3 操作码2.3.1 数据库选择器2.3.2 Resizeb信息2.3.3 辅助字段2.3.4 键值对key 到期时间戳值类型键值2.4 CRC64校验码三、编码方式3.1 Length Encoding 长度编码3.2 字符串编码3.2.1 长度前缀…...