Matplotlib几种基础图形的作用和代码展示
本文主要内容
对matplotlib中的折线图、散点图、条形图、直方图、扇形图、雷达图、箱型图的简单总结。
1.折线图
主要作用:
matplotlib中的折线图主要用于表示数值随连续时间间隔或有序类别而变化的情况。它能够将散点图按照x轴坐标顺序连接起来,以便更好地展示因变量y随着自变量x改变的趋势。这种图表特别适合用于显示随时间而变化的连续数据,能看出数量的差异和增长趋势的变化。
折线图可以用来分析事物随时间或有序类别而变化的趋势。例如,我们可以用折线图来显示某个月的温度变化,或者一家公司的销售额随时间的变化。如果有多组数据,折线图也能用来分析这些数据随时间变化或有序类别的相互作用和影响。
总的来说,折线图是一种强大的可视化工具,可以帮助我们更好地理解和分析数据的变化趋势。
代码展示:
# 1.数据
x = list(range(0,24,2))
y = [15,13,14.5,17,20,25,26,28,27,22,18,15]
# 2.绘制折线图
plt.plot(x,y)
# 4.修改x,y轴刻度标签
x_t = x
x_l = [f"{i}点" for i in x]
plt.xticks(x_t,x_l,rotation=45)
y_t = y
y_l = [f"{i}°" for i in y]
plt.yticks(y_t,y_l)
# 5.添加x,y轴标签
plt.xlabel("time")
plt.ylabel("temp")
# 6.添加标题
plt.title("temp change")
# 7.网格化
plt.grid()
# 8.添加注释
for i,j in list(zip(x,y)):
plt.annotate(f"{i,j}",xy = (i,j), xytext = (i-1.5,j))
# 3.展示图形
plt.show()
2.散点图
主要作用:
matplotlib中的散点图主要用于显示两个变量之间的关系和趋势。
散点图能直观地表现出影响因素和预测对象之间的总体关系趋势。它们可以提供如下信息:
- 特征之间是否存在数值或者数量的关联趋势,其趋势是线性的还是非线性的。通过观察散点图,我们可以大致判断变量之间是否存在某种关系,例如线性关系、非线性关系等。
- 观察数据中是否存在噪点,以及直观的判断噪点是否会对模型产生很大的影响。散点图可以揭示数据中的异常值,这些异常值可能是由于测量误差、数据采集问题等原因导致的。对于这些异常值,我们可以进行进一步的分析和处理。
此外,我们可以通过对散点图进行进一步拟合,例如添加一条拟合线或者拟合曲线,来更好地展示变量之间的关系。总的来说,散点图是数据分析中常用的可视化工具,可以帮助我们更好地理解和处理数据。
此外,我们可以通过对散点图进行进一步拟合,例如添加一条拟合线或者拟合曲线,来更好地展示变量之间的关系。总的来说,散点图是数据分析中常用的可视化工具,可以帮助我们更好地理解和处理数据
代码展示:
# 1.构建x,y
# 4月份的气温
y_4 = [11,17,16,11,12,11,12,13,10,14,8,13,12,15,14,17,18,21,16,17,30,14,15,15,15,19,21,22,22,22,23]
# 10月份的气温
y_10 = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,15,10,11,13,12,13,6]
x_4 = list(range(1,32))
x_10 = list(range(51,82))
# 4.更改画布尺寸
plt.figure(figsize=(14,8))
# 2.绘制图形
plt.scatter(x_4,y_4)
plt.scatter(x_10,y_10)
# 5.设置x,y轴刻度标签
x_l = [f"4月{i}号" for i in x_4]
x_l += [f"10月{i-50}号" for i in x_10]
x_t = x_4+x_10
plt.xticks(x_t[::2],x_l[::2],rotation=90)
# 3.展示图形
plt.show()
3.条形图
主要作用:
matplotlib中的条形图主要用于显示数据的相对大小和比较。
条形图能够清晰地展示每个类别的数量或者每个类别的数值大小关系,通过条形的长度来直观地体现数据的差异和比较结果。这种图表特别适合用于展示各类别之间的数量比较,例如不同产品线的销售额、不同地区的销售数据等。
条形图在以下几个方面具有显著作用:
- 显示各类别的数量或者数值的大小关系。通过条形图的长度,我们可以直观地看出不同类别的数量差异或者数值大小关系,这有助于我们更好地理解数据的分布和差异。
- 直观地进行数据比较。条形图可以清晰地展示不同类别的数据,通过对比各个条形的长度,我们可以直观地判断各类别之间的数量差异或者数值大小关系。
- 揭示数据的整体分布情况。通过观察条形图,我们可以了解数据的整体分布情况,例如数据的集中或分散程度、数据的中位数等。
总的来说,条形图是一种强大的可视化工具,可以帮助我们更好地理解和比较数据的大小关系。
代码展示:
3.1 柱状图
# 条形图
# x->>x轴坐标点/坐标标签
# height->>y轴的坐标点
# width->>柱子的宽度,默认为0.8
# bottom->>y轴的基线,默认是0,也就是距离底部的距离为0
# align->>对齐方式,注意:默认是center,居中显示。但是当设置为edge,则靠边对齐.
# - 当width>0时,设置为edge,往右边边缘对齐
# - 当width<0时,设置为edge,往左边边缘对齐
# plt.bar
# 1.构建x,y
movie_x = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]
movie_height = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]
# 4.设置画布大小
plt.figure(figsize=(14,8))
# 2.绘制条形图
plt.bar(movie_x,movie_height,width=-0.5,bottom=10,align="edge",color="y")
# 5.让刻度旋转
x_t = list(range(len(movie_x)))
x_l = movie_x
plt.xticks(x_t,x_l,rotation=90)
# 3.展示图形
plt.show()
3.2 分组条形图
# 1.构建数据
x = ["苹果", "梨子", "车厘子"]
y_q1 = [1000, 800, 3000]
y_q2 = [1200, 700, 2800]
# 2.可视化
# 思路1:修改width
plt.bar(x,y_q1,width=-0.3,align="edge")
plt.bar(x,y_q2,width=0.3,align="edge")
# 思路2:更改x
width = 0.35
x_p = list(range(len(x)))
po_l = [i-(width/2) for i in x_p]
po_r = [i+(width/2) for i in x_p]
plt.bar(po_l,y_q1,width=width,label="Q1")
plt.bar(po_r,y_q2,width=width,label="Q2")
# 4.设置图例
plt.legend(loc="upper left")
# 5.设置刻度标签
plt.xticks(x_p,x)
#6.设置注释
for x_i,y_i in list(zip(po_l,y_q1)):
plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i-0.1,y_i))
for x_i,y_i in list(zip(po_r,y_q2)):
plt.annotate(f"{y_i}",xy=(x_i,y_i),xytext=(x_i-0.1,y_i))
# 3.展示图形
plt.show()
3.3 堆叠条形图
# 1.构建数据
x = ["苹果", "梨子", "车厘子"]
y_q1 = [1000, 800, 3000]
y_q2 = [1200, 700, 2800]
# 2.可视化
plt.bar(x,y_q1,width=0.5,label="Q1")
plt.bar(x,y_q1,width=0.5,bottom=y_q1,label="Q2")
plt.legend()
# 3.展示图形
plt.show()
3.4 水平条形图
# 1.构建数据
movie_y = ["流浪地球","复仇者联盟4:终局之战","哪吒之魔童降世","疯狂的外星人","飞驰人生","蜘蛛侠:英雄远征","扫毒2天地对决","烈火英雄","大黄蜂","惊奇队长","比悲伤更悲伤的故事","哥斯拉2:怪兽之王","阿丽塔:战斗天使","银河补习班","狮子王","反贪风暴4","熊出没","大侦探皮卡丘","新喜剧之王","使徒行者2:谍影行动","千与千寻"]
movie_width = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23,5.22]
# 2.绘制条形图
plt.barh(movie_y,movie_width)
# 3.展示图形
plt.show()
4.直方图
主要作用:
matplotlib中的直方图主要用于显示数据分布的情况和数据的频数。
直方图能够将数据按照区间划分为不同的组,每组数据的频数通过矩形的高度来表示,矩形的宽度则表示各组的组距。通过直方图,我们可以直观地观察数据的分布情况,例如数据的中心趋势、数据的离散程度等。
直方图在以下几个方面具有显著作用:
- 显示数据的分布情况。通过观察直方图,我们可以了解数据的中心趋势和数据的离散程度,这有助于我们更好地理解数据的分布特征。
- 揭示数据的异常或孤立数据分布。通过直方图的形状和分布,我们可以判断数据中是否存在异常或孤立的数据分布,例如偏态分布、双峰分布等。
- 直观地进行数据比较。通过对比不同直方图的形状和分布,我们可以直观地判断不同数据集之间的差异和比较结果。
总的来说,直方图是一种强大的可视化工具,可以帮助我们更好地理解和处理数据的分布特征。
代码展示:
# x:绘图的数据
# bins:组数;注意:一定整数
# density:True ->> 频率图
# 1.构建数据
temp_li= [6.9,4.1,6.6,5.2,6.4,7.9,8.6,3.0,4.4,6.7,7.1,4.7,9.1,6.8,8.6,5.2,5.8,7.9,5.6,8.8,8.1,5.7,8.4,4.1,6.4,6.2,5.2,6.8,5.6,5.6,6.8,8.2,6.4,4.8,6.9,7.1,9.7,6.4,7.3,6.8,7.1,4.8,5.8,6.5,5.9,7.3,5.5,7.4,6.2,7.7]
# 2.计算组数
# 2.1计算最大值与最小值
cha = max(temp_li) - min(temp_li)
# 2.2初始化组距
b = 1
# 2.3计算组数
bins_ = int(round(cha)/b)
# 3.可视化
plt.hist(temp_li,bins=bins_,density=True)
# 5.设置组件
plt.xlabel("温度分布区间")
plt.ylabel("频数")
plt.title("温度分布直方图")
# 4.展示图形
plt.show()
5.扇形图
主要作用:
matplotlib中的扇形图主要用于表示各个部分占总体的百分比。
扇形图用整个圆表示总数,用圆内各个扇形的大小表示各部分数量占总数的百分数。通过扇形图的百分比,我们可以直观地了解数据中的相对大小和比例关系。
扇形图在以下几个方面具有显著作用:
- 显示各个部分占总体的百分比。通过观察扇形图的各个扇形大小,我们可以直观地了解数据中各部分占总体的百分比关系。
- 揭示数据的整体分布情况。通过观察扇形图的形状和分布,我们可以了解数据的整体分布情况,例如数据的集中或分散程度、数据的中位数等。
- 直观地进行数据比较。通过对比不同扇形图的形状和分布,我们可以直观地判断不同数据集之间的差异和比较结果。
总的来说,扇形图是一种强大的可视化工具,可以帮助我们更好地理解和处理数据的分布特征。
代码展示:
# 参数
# x:数据情况,它的占比,和为1
# explode:设置某个分块是否要分离饼图
# labels:指定标签
# autopct:百分比数据标签
# shadow:是否有阴影部分
# plt.pie
# 返回值
# patches:每一个扇形对象
# texts:label的文本列表
# autotexts:百分比的文本列表
# 1.构建数据
frac = [1/50,6/50,11/50,15/50,9/50,6/50,2/50]
label = ['[3,4]','(4,5]','(5,6]','(6,7]','(7,8]','(8,9]','(9,10]']
explode_ = [0,0,0,0.1,0,0,0]
# 2.可视化
plt.pie(frac,labels=label,autopct="%1.2f%%",explode=explode_,shadow=True)
# 3.展示图形
plt.show()
6.雷达图
主要作用:
matplotlib中的雷达图主要用于多个指标之间的比较,找出比较强势或者弱势的指标,并对一个或多个对象进行比较。
雷达图是一种多维度的图表,可以用来表示多个指标之间的关系和比较。通过雷达图,我们可以将多个指标的数值以雷达线的长度来表示,从而直观地比较各个指标在不同对象之间的差异和关系。
雷达图在以下几个方面具有显著作用:
- 显示多个指标之间的关系和比较。通过观察雷达图的雷达线长度,我们可以直观地了解各个指标在不同对象之间的数值关系和比较结果。
- 找出一个或多个对象的强势或弱势的指标。通过观察雷达图的形状和分布,我们可以找出对象在各个指标上的强弱势表现,例如找出某个产品在各个方面的优势和劣势等。
- 揭示数据的整体分布情况。通过观察雷达图的形状和分布,我们可以了解数据的整体分布情况,例如数据的中心趋势、数据的离散程度等。
总的来说,雷达图是一种强大的可视化工具,可以帮助我们更好地处理和分析多个指标之间的比较和关系。
代码展示:
import numpy as np
# 第一个参数:theta->>x轴坐标点为弧度
# 注意:360°->>角度 2*PI->>弧度
# 第二个参数:数据
# 1.准备数据
quaters = ['Q1','Q2','Q3','Q4','Q5','Q6','Q7','Q1'] # 注意:这不是x,x是弧度
sales = [40,91,44,90,20,54,80]
# 2.求弧度。设置每个扇区弧度,将360°等分
# 求的数据个数
n = len(sales)
# 创建等差数列
angles = list(np.linspace(0,2*np.pi,n))
# 想要图形是闭合的区间,起始值 = 终点值
# 数据再处理,使得最后一个数据与第一个数据连接起来
sales.append(sales[0])
angles.append(angles[0])
# 3.可视化
plt.polar(angles,sales,">-", color="g")
# plt.fill(angles,sales,facecolor="g")填充颜色
# 5.设置刻度标签
plt.xticks(angles,quaters)
# 4.展示图形
plt.show()
7.箱型图
主要作用:
matplotlib中的箱型图主要用于显示数据集的分布情况,包括数据的中心趋势、分散程度、异常值等。
箱型图可以用来观察数据整体的分布情况,包括上下限、各分位数、异常值等。通过计算这些统计量,生成一个箱体图,箱体包含了大部分的正常数据,而在箱体上边界和下边界之外的则是异常数据。
箱型图在以下几个方面具有显著作用:
- 显示数据的分布情况。通过观察箱型图的箱体形状和分布,我们可以直观地了解数据的分布情况,例如数据的中心趋势、数据的离散程度等。
- 揭示异常值的存在。通过观察箱型图的箱体形状和分布,我们可以判断数据中是否存在异常值,例如超出箱体上边界或下边界的异常数据。
- 判断数据的偏态和尾重。通过观察箱型图的箱体形状和分布,我们可以判断数据是否存在偏态或尾重,例如中位数与上下四分位数的中心位置关系等。
总的来说,箱型图是一种强大的可视化工具,可以帮助我们更好地了解数据的分布情况,包括异常值的检测和数据的中心趋势等。
代码展示:
import random
# 1.随机生成100个数
data = [random.randint(0,100) for i in range(100)]
data
# 2.添加两个异常值
data.extend([-200,500])
data
# 绘制箱型图
# x:数据
# notch:置信区间 用的少,基本不用
# sym:异常点得符号
# meanline:设置均线
# showmeans:显示均值
# vert:False设置为水平箱型图
# 3.可视化
plt.boxplot(data,notch=True,sym="^",meanline=False,showmeans=True,vert=False)
# 4.展示图形
plt.show()
总结
matplotlib中图形还有很多很多,每个图形也还有很多其他的组件和参数,图形本身建立并不难。主要难在如何在给定的需求下最恰当的运用这些参数和组件。matplotlib官方也是给了很多很beautiful案例供我们学习使用(代码可以直接复制哦!)。官方地址:https://matplotlib.org/stable/gallery/index。
另外,如果大家对本文有什么疑问可以尽情的在评论区提出来,作者会竭尽所能为大家解答的。有帮助的话,也可以给作者留个👍,谢谢喽!