matplotlib常用操作

Matplotlib | 一文搞定Matplotlib从入门到实战演练! Matplotlib 是一个 Python 的 2D绘图库。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。官网https://matplotlib.org/\qquad学习Matplotlib 可让数据可视化,更直观的真实给用户。使数据更加客观、更具有说服力。Matplotlib是Python的库,又是开发中常用的库。 阅读详情

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**2

plt.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 5

labels = ['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 plt

x = 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 plt

x = 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()

在这里插入图片描述

【Python篇】matplotlib超详细教程 【Python篇】Matplotlib超详细教程-由入门到精通第一章:Matplotlib基础入门 (Matplotlib Fundamentals)在本章中,我们将首先介绍Matplotlib是什么,它的主要特点和在Python数据科学生态中的地位。然后,我们会详细讲解Matplotlib的核心架构,特别是(画布)、(坐标系/子图)和(绘图元素)这三个关键概念。接着,我们将指导你完成Matplotlib的安装,并演示如何绘制你的第一个简单图形,如线图和散点图。最后,我们会介绍两种主要的绘图接口:便捷的接口 阅读详情

相关推荐

Matplotlib使用方法

Matplotlib 常见基本图形 折线图:plt.plot 柱形图:plt.bar,barh(水平) 直方图:plt.hist 箱线图:plt.boxplot 密度图:plt.kde 面积图:plt.area 散点图:plt.scatter 饼 图:plt.pie 散点图矩阵:pd.ploting.scatter_matrix(df) 绘图基本步骤(注意4.5顺序不能颠倒) 1 导包...

weixin_45043118的博客 359

Matplotlib基础操作(机器学习入门)

Matplotlib基础操作(机器学习入门)

zjjaibc的博客 3206

Matplotlib常用操作

使用Matplotlib库完成绘制折线图、格式化绘图样式、用关键字字符串绘图、用分类变量绘图、多种图形共轴图形的绘制、在图形中使用文本提示等操作来体验Matplotlib绘图库的使用。

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1264

【Matplotlib】常用基本操作

文章目录学习心得1.Matplotlib图像构成2. Matplotlib是Python中一个二维绘图包,能够非常简单的实现数据可视化。Matplotlib最早由John Hunter于2002年启动开发,其目的是为了构建一个Matlab式的绘图函数接口。下面详细介绍Matplotlib图像构成、Matplotlib图像基本绘图流程、中文字符显示、坐标轴字符刻度标注等基本绘图知识。 为了方便快速绘图,Matplotlib通过pyplot模块(import matplotlib.pyplo

发现问题,并解决问题,批判性思维 1778

自动化学报Ctex+texstudio配置方法

自动化学报Latex的模板win10使用方法(CTEX+texstudio)

zxy15924462502的博客 7367

使用pdfBox实现pdf转图片出现中文方块乱码 简单修改源码解决

参考文章 问题排查:使用pdfbox将pdf转image时STSong-Light字体中文乱码 pdfbox版本是2.0 日志中打印出类似这样的日志(例:Using fallback XXX for CID-keyed font STSong-Light),就说明系统没有安装STSong-Light字体,pdfbox使用XXX字体来替代了。如果出现方块,就说明没有这种字体,并且替代字体也没有,日志也有相应的其他提示。 正常操作就是安装缺失的 STSong-Light 字体,但是在网上搜到的都是 STSong

aji_csdn的博客 5266

Matplotlib中对坐标轴的常用操作

【代码】Matplotlib中对坐标轴的常用操作。

辉的博客 324

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1950

Matplotlib的常用操作实战

文章目录前言一、matplotlib是什么?二、实战练习1.plot,xlim,xlabel,grid的使用问题1:2.scatter,legend,title问题1:3.xtick,text,annotate问题1:问题2:4.axvline,axvspan,综合图问题1:5.并列柱形图与堆积条形图问题1:问题2:6.分裂式饼图与内嵌式环形饼图问题1:问题2:问题3:7.阶梯图棉棒图极坐标图问题1:问题2:问题3:8.读入excel和子图问题1:总结 前言 本文介绍了一些matplotlib的使用技

小刘的博客 7357

【各种轮子2】基于Icepak的PCB散热仿真比较

随着电子产品的集成度越来越高,PCB板的尺寸越来越小,板级芯片散热的问题越来越成为电子工程师的一个重要挑战。对于板级芯片散热,主要依靠工程师对PCB自身的设计进行优化,同时要兼顾系统的尺寸和成本。本文分别从芯片角度和PCB角度进行建模,芯片模型选用QFN封装,PCB模型采用走线导入模型,探讨了芯片结构,PCB铜厚,PCB叠层厚度对芯片散热的影响。

3668

算法系列之十二:多边形区域填充算法--几种边标志填充算法

四、边界标志填充算法 在光栅显示平面上,多边形是封闭的,它是用某一边界色围成的一个闭合区域,填充是逐行进行的,即用扫描线逐行对多边形求交,在交点对之间填充。边界标志填充算法就是在逐行处理时,利用边界或边界颜色作为标志来进行填充的。准确地说,边界标志填充算法不是指某种具体的填充算法,而是一类利用扫描线连贯性思想的填充算法的总称。这类算法有很多种,本篇就介绍几种。 首先介绍一种以边为中心的边缘填充...

java开发指南博客 【转载】 1898

备忘:我常用的matplotlib.pyplot操作

一: import numpy as np from scipy.stats import beta import matplotlib.pyplot as plt from scipy import stats colors = [ 'green', 'red', 'orange', 'brown', 'pink', 'gray', ...

阿门的博客 438

【ODX介绍】-4.2-UDS诊断$27服务在ODX-D诊断描述文件中如何描述

共25页精讲:附ODX-D XML:UDS $27 Security服务0x61和0x62 Sub-Function,其它Sub-Function可参照其格式。 目录 1 ODX-D描述一个UDS $27 Security服务Sub-Function的结构 2 标签DIAG-SERVICE描述的内容 2.1 举例:DIAG-SERVICE的XML描述 3 标签REQUEST描述的内容 3.1 举例:REQUEST的XML描述 4 标签POS-RESPONSE描述的内容 4.1 举例:PO..

「汽车电子助手」的博客 1120

matplotlib库常用操作

记录常用的一些matplotlib常用操作,方便快速查找。

个人记录使用 442

q-learning精讲

Q-learning Q-learning是一种用于机器学习的强化学习技术。 Q-learning的目标是学习一种策略,告诉Agent在什么情况下要采取什么行动。 它不需要环境模型,可以处理随机转换和奖励的问题,而无需进行调整。 对于任何有限马尔可夫决策过程(FMDP),Q学习找到一种最优的策略,即从当前状态开始,它在任何和所有后续步骤中最大化总奖励的预期值。在给定无限探索时间和部分随机策略的情况...

weixin_41697507的博客 1万+

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

【数据操作与可视化】Matplotlib绘图-常用操作

【数据操作与可视化】Matplotlib绘图-常用操作

AIxiaoyun001的博客 546

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

matplotlib的一些常用操作

matplotlib 这里主要记一些常用的和基本的操作命令 import matplotlib.pyplot as plt import numpy as np 建立画布 plt.figure(figsize=(6,6)) plt.show() 创建一个(6,6)大小的空画布,在中间配置相应的图形 坐标轴、标题、图例 plt.xlabel('x label') plt.ylabel('y label') plt.title("Simple Plot") plt.xlim(1,4) #上下限也

XC___XC的博客 578

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Matplotlib 常用可视化操作

Matplotlib 常用可视化操作 文章目录Matplotlib 常用可视化操作0. matplotlib 介绍1. 简单辅助线2. 坐标轴设置用figure() 函数创建图表设置x轴 与 y轴的名称设置x轴 与 y轴的数据范围设置x轴和y轴的坐标刻度设置图表标题移动坐标轴 & 改变轴颜色其他一些坐标轴的方法和参数3. 显示图例 (legend & label)4. 显示备注 (annotate & test)用annotate()函数可用于显示带箭头的备注用text()函数可以在

cjm_success的博客 3588

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

matplotlib常用绘图操作

matplotlib数据可视化展示,保存图片,设置图像信息,绘制散点图,折线图..........

ssunshining的博客 1360

matplotlib画图常用操作

1、图像显示中文 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] 2、绘制多个子图 可以使用 subplot() 快速绘制,plt.subplot(321+i)表示绘制3x2排列的子图第1行的第i个图。要放到plt.plot(x,y)上面。 plt.subplot(321+1) plt.plot(x, y) pl...

weixin_44845650的博客 566

matplotlib 常用操作

标准的Python中用列表(list)保存一组值,可以当作数组使用。但由于列表的元素可以是任何对象,因此列表中保存的是对象的指针。这样一来,为了保存一个简单的列表[1,2,3],就需要有三个指针和三个整数对象。对于数值运算来说,这种结构显然比较浪费内存和 CPU 计算时间。 使用numpy的array模块可以解决这个问题。细节不在此赘述。这里主要记录一些matplotlib的基本使用...

alujdh6172的博客 117

matplotlib常用方法和操作

Matplotlib 是 python 中一款强大的可视化绘图工具,可以以更直观的方式对数据进行展示和呈现,可以准确高效传递信息,甚至可以帮助我们发现某种规律和特征,挖掘数据背后的价值,本文简单介绍了Matplotlib常用操作和方法。

m0_73716246的博客 429
上一篇: numpy常用操作
下一篇: pandas常用操作
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值