Matplotlib:Python数据可视化的基石与实战进阶之路
2.1 安装在使用 Matplotlib 之前,需要先进行安装。如果你使用的是通过本文的学习,我们从 Matplotlib 的基础概念、安装使用,到常见图表类型绘制、图表定制美化,再到多子图绘制和实战案例,全面了解了这个强大的数据可视化库。Matplotlib 的功能远不止于此,还有3D绘图、动画制作等高级特性等待你去探索。希望你能在实际的数据可视化工作中,灵活运用 Matplotlib ,将数据
目录
在数据驱动的时代,数据可视化已成为数据分析、结果展示的关键环节。Python生态中, Matplotlib 作为最基础且应用广泛的数据可视化库,以其强大的功能和高度的灵活性,帮助开发者将枯燥的数据转化为直观、美观的图表。本文将从基础入门到实战进阶,带你全面掌握 Matplotlib 的使用技巧。
一、Matplotlib简介
Matplotlib 是Python的一个2D绘图库,由John D. Hunter开发,旨在为Python提供一个像MATLAB那样简单易用的绘图环境。它几乎可以绘制所有类型的图表,包括折线图、散点图、柱状图、饼图等,并且支持高度定制化,能够满足学术出版、商业报表等各种场景的需求。 Matplotlib 的核心是 pyplot 模块,它提供了一套类似于MATLAB的绘图API,方便用户快速创建各种图表。同时, Matplotlib 采用面向对象的编程方式,允许开发者进行更精细的图表控制和定制。
二、安装与基本使用
2.1 安装
在使用 Matplotlib 之前,需要先进行安装。如果你使用的是 pip 包管理器,只需在命令行中执行以下命令:
bash pip install matplotlib
如果你使用的是
Anaconda ,可以使用 conda 进行安装:
bash conda install matplotlib
2.2 基本绘图
安装完成后,我们可以通过一个简单的例子来了解 Matplotlib 的基本绘图流程。以下是一个绘制简单折线图的代码示例:
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 绘制折线图
plt.plot(x, y)
# 添加标题和坐标轴标签
plt.title('Simple Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图表
plt.show()

在上述代码中,我们首先导入 matplotlib.pyplot 模块并简写成 plt 。然后准备了两组数据 x 和 y ,使用 plt.plot() 函数绘制折线图,接着通过 plt.title() 、 plt.xlabel() 和 plt.ylabel() 分别设置图表标题和坐标轴标签,最后使用 plt.show() 显示图表。
三、常见图表类型绘制
3.1 散点图
散点图常用于展示两个变量之间的关系,通过 plt.scatter() 函数可以轻松绘制。
import matplotlib.pyplot as plt
import numpy as np
# 生成随机数据
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
# 绘制散点图
plt.scatter(x, y)
plt.title('Scatter Plot')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

3.2 柱状图
柱状图适合用于比较不同类别数据的大小,使用 plt.bar() 函数绘制。
import matplotlib.pyplot as plt
categories = ['A', 'B', 'C', 'D']
values = [12, 18, 7, 15]
plt.bar(categories, values)
plt.title('Bar Plot')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.show()
3.3 饼图
饼图用于展示各部分占总体的比例关系,通过 plt.pie() 函数实现。
import matplotlib.pyplot as plt
labels = ['Apple', 'Banana', 'Cherry', 'Date']
sizes = [30, 25, 40, 5]
plt.pie(sizes, labels=labels, autopct='%1.1f%%')
plt.title('Pie Chart')
plt.axis('equal') # 保证饼图为正圆形
plt.show()
四、图表定制与美化
4.1 颜色、线型和标记
在 plot 函数中,可以通过参数指定线条颜色、线型和数据点标记。例如:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
# 红色虚线,圆形标记
plt.plot(x, y, 'ro--')
plt.title('Customized Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()
4.2 添加图例
当图表中有多条曲线或多个数据系列时,添加图例可以帮助读者区分。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]
plt.plot(x, y1, label='Line 1')
plt.plot(x, y2, label='Line 2')
plt.title('Plot with Legend')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend() # 添加图例
plt.show()
4.3 网格线与刻度设置
通过 plt.grid() 函数可以添加网格线,通过 plt.xticks() 和 plt.yticks() 函数可以设置坐标轴刻度。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y)
plt.title('Plot with Grid and Custom Ticks')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 添加网格线
plt.grid(True)
# 设置x轴刻度
plt.xticks([1, 2, 3, 4, 5])
# 设置y轴刻度
plt.yticks([0, 2, 4, 6, 8, 10])
plt.show()
五、多子图绘制
在实际应用中,我们经常需要在一个图表中展示多个子图, Matplotlib 提供了多种实现方式,最常用的是 plt.subplot() 和 plt.subplots() 函数。
5.1 使用plt.subplot()
plt.subplot() 函数的参数依次为行数、列数和当前子图的编号。
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(0, 2 * np.pi, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 创建2x1的子图布局,当前绘制第1个子图
plt.subplot(2, 1, 1)
plt.plot(x, y_sin)
plt.title('Sin Curve')
# 绘制第2个子图
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cos Curve')
plt.show()
5.2 使用plt.subplots()
plt.subplots() 函数返回一个包含 Figure 对象和 Axes 对象数组的元组,使用起来更加灵活
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 创建2x1的子图布局,返回Figure和Axes对象
fig, axs = plt.subplots(2, 1)
axs[0].plot(x, y_sin)
axs[0].set_title('Sin Curve')
axs[1].plot(x, y_cos)
axs[1].set_title('Cos Curve')
plt.show()
六、实战案例:
销售数据可视化 假设我们有某公司2023年各季度的销售数据,现在使用 Matplotlib 对其进行可视化分析。
import matplotlib.pyplot as plt
quarters = ['Q1', 'Q2', 'Q3', 'Q4']
sales = [12000, 15000, 18000, 20000]
# 绘制柱状图
plt.bar(quarters, sales)
plt.title('2023 Annual Sales Data')
plt.xlabel('Quarter')
plt.ylabel('Sales Amount')
# 在每个柱子上添加数据标签
for i, sale in enumerate(sales):
plt.text(i, sale + 500, str(sale), ha='center')
plt.show()

上述代码首先定义了季度和销售数据,然后绘制柱状图,并通过 plt.text() 函数在每个柱子上方添加了具体的销售数据标签,使图表信息更加清晰直观。
七、总结
通过本文的学习,我们从 Matplotlib 的基础概念、安装使用,到常见图表类型绘制、图表定制美化,再到多子图绘制和实战案例,全面了解了这个强大的数据可视化库。 Matplotlib 的功能远不止于此,还有3D绘图、动画制作等高级特性等待你去探索。希望你能在实际的数据可视化工作中,灵活运用 Matplotlib ,将数据以更精彩的方式呈现出来。在后续的学习中,可以结合其他数据分析库如 Pandas ,进一步提升数据处理和可视化的效率与效果。
一、散点图基础
1.1散点图的定义概念
散点图(Scatter Diagram)又称为散点分布图,是一种在二维平面上展示数据点分布的图表,每个点的坐标位置由两个变量的值决定。通过观察散点图,我们可以直观地判断两个变量之间是否存在某种关联,比如线性关系、非线性关系或者是否存在异常值。例如,在分析学生的考试成绩时,可以将平时作业得分作为一个变量,考试成绩作为另一个变量,绘制散点图来查看平时作业完成情况与考试成绩之间的关系。
1.2绘制简单散点图
散点图的绘制主要通过plt.scatter() 函数来实现。下面是一个基本的示例代码:
在以上代码中,首先导入了入了 matplotlib.pyplot 和 numpy 库。 numpy 用于生成随机数据, matplotlib.pyplot 则用于绘图。通过 np.random.rand() 函数生成了50个0到1之间的随机数作为 x 和 y 坐标,然后使用 plt.scatter(x, y) 绘制散点图,最后通过 plt.title() 、 plt.xlabel() 和 plt.ylabel() 添加图表标题和坐标轴标签,使用 plt.show() 显示图表。
1.3 plt.scatter()函数参数详解
plt.scatter() 函数有许多参数,通过这些参数可以对散点图进行各种定制。下面介绍一些常用参数: - x, y:必需参数,分别表示散点的横坐标和纵坐标数据,可以是列表、数组等。 - s:表示散点的大小,默认值为20。可以是单个数值,也可以是与 x 、 y 长度相同的数组,用于为每个点设置不同的大小。例如:

上述代码中c:表示散点的颜色,默认值为蓝色。可以是单个颜色字符串(如'red'、'green'等),也可以是与 x 、 y 长度相同的数组,用于根据数据值映射不同的颜色。还可以使用RGB或RGBA元组来指定颜色。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50) # 生成随机颜色值
plt.scatter(x, y, c=colors, cmap='viridis') # 使用颜色映射
plt.title('Scatter Plot with Colormap')
plt.xlabel('X')
plt.ylabel('Y')
plt.colorbar() # 添加颜色条
plt.show()

这里使用 cmap='viridis' 指定了颜色映射, plt.colorbar() 添加了颜色条,用于显示颜色与数据值的对应关系。 - marker:表示散点的标记样式,默认值为圆形 'o' 。Matplotlib提供了多种标记样式,如 's' (正方形)、 '^' (三角形)、 '*' (星形)等。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y, marker='s') # 使用正方形标记
plt.title('Scatter Plot with Square Marker')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

alpha:表示散点的透明度,取值范围是0(完全透明)到1(完全不透明),默认值为1。通过调整透明度,可以在数据点较多时避免重叠,更好地展示数据分布。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y, alpha=0.5) # 设置透明度为0.5
plt.title('Scatter Plot with Transparency')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

1.4scatter函数及其说明
|**参数**|**说明**| |---|---| |x, y|必需参数,散点的横/纵坐标数据(数组或列表)。| |s|散点大小:<br>- 单个数值:所有点大小一致<br>- 数组:每个点大小可不同(需与x/y长度一致)| |c|散点颜色:<br>- 单色字符串(如'red'/'#FF5733')<br>- 颜色数组(映射数据值,需搭配cmap)<br>- RGB/RGBA元组(如(0.1, 0.2, 0.3, 0.5))| |marker|散点标记样式:<br>- 基础样式:'o'(圆)、's'(正方形)、'^'(三角形)<br>- 特殊样式:'*'(星号)、'd'(菱形)、'p'(五边形)| |alpha|透明度(0-1),用于处理数据重叠问题(如alpha=0.6)。|

二、散点图的进阶学习
2.1改变散点颜色和透明度
在前面的示例中已经介绍了如何通过 c 参数改变散点颜色和使用 alpha 参数调整透明度。除了使用随机颜色或颜色映射,还可以根据数据的类别来设置颜色。例如,假设有两组数据,分别用不同的颜色表示:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x1 = np.random.rand(30)
y1 = np.random.rand(30)
x2 = np.random.rand(30) + 0.5
y2 = np.random.rand(30) + 0.5
plt.scatter(x1, y1, c='red', label='Group 1')
plt.scatter(x2, y2, c='blue', label='Group 2')
plt.title('Scatter Plot with Different Colors for Groups')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend() # 添加图例
plt.show()

在这个例子中,生成了两组不同的数据,分别用红色和蓝色绘制散点,并通过 plt.legend() 添加了图例,以便区分不同的数据组。
2.2 添加图例
当图表中有多个数据系列时,添加图例可以帮助读者更好地理解图表内容。在前面的示例中已经使用了 plt.legend() 添加图例, plt.legend() 会根据 plt.scatter() 中的 label 参数来生成图例。还可以通过一些参数来定制图例的位置、字体大小等。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x1 = np.random.rand(30)
y1 = np.random.rand(30)
x2 = np.random.rand(30) + 0.5
y2 = np.random.rand(30) + 0.5
plt.scatter(x1, y1, c='red', label='Group 1')
plt.scatter(x2, y2, c='blue', label='Group 2')
plt.title('Scatter Plot with Customized Legend')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend(loc='upper right', fontsize='large') # 设置图例位置和字体大小
plt.show()

2.3 调整散点大小和标记样式
通过 s 参数可以调整散点大小,通过 marker 参数可以改变散点的标记样式。还可以结合这两个参数,为不同的数据组设置不同大小和样式的散点。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x1 = np.random.rand(30)
y1 = np.random.rand(30)
x2 = np.random.rand(30) + 0.5
y2 = np.random.rand(30) + 0.5
sizes1 = np.random.randint(20, 50, size=30)
sizes2 = np.random.randint(50, 80, size=30)
plt.scatter(x1, y1, s=sizes1, marker='o', c='red', label='Group 1')
plt.scatter(x2, y2, s=sizes2, marker='s', c='blue', label='Group 2')
plt.title('Scatter Plot with Different Sizes and Markers')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

2.4 设置坐标轴范围和刻度
有时候需要手动设置坐标轴的范围和刻度,以便更好地展示数据。可以使用 plt.xlim() 和 plt.ylim() 来设置坐标轴范围,使用 plt.xticks() 和 plt.yticks() 来设置刻度。例如:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
plt.title('Scatter Plot with Customized Axes')
plt.xlabel('X')
plt.ylabel('Y')
plt.xlim(0, 1.2) # 设置x轴范围
plt.ylim(0, 1.2) # 设置y轴范围
plt.xticks(np.arange(0, 1.2, 0.2)) # 设置x轴刻度
plt.yticks(np.arange(0, 1.2, 0.2)) # 设置y轴刻度
plt.show()

三、散点图的实用性
3.1 分析体重与身高的关系
假设我们有一组人的体重和身高数据,想要通过散点图来探索它们之间的关系。下面是一个简单的示例代码:
mport matplotlib.pyplot as plt
import numpy as np
# 模拟体重和身高数据
np.random.seed(0)
weights = np.random.normal(70, 10, size=100) # 均值70,标准差10
heights = np.random.normal(170, 10, size=100) + weights * 0.5 # 身高与体重有一定线性关系
plt.scatter(weights, heights)
plt.title('Relationship between Weight and Height')
plt.xlabel('Weight (kg)')
plt.ylabel('Height (cm)')
plt.show()

3.2 研究销售额与广告支出的关联
假设有一家公司的销售额和广告支出数据,我们来绘制散点图研究它们之间的关联:
import matplotlib.pyplot as plt
import numpy as np
# 模拟销售额和广告支出数据
np.random.seed(0)
advertising_expenses = np.random.randint(10000, 100000, size=50)
sales = 5 * advertising_expenses + np.random.randint(-10000, 10000, size=50) # 销售额与广告支出有一定线性关系,但存在随机波动
plt.scatter(advertising_expenses, sales)
plt.title('Correlation between Sales and Advertising Expenses')
plt.xlabel('Advertising Expenses')
plt.ylabel('Sales')
plt.show()

通过散点图可以观察到销售额随着广告支出的增加而有上升的趋势,但数据存在一定的波动。这表明广告支出对销售额有影响,但可能还有其他因素在起作用。
四、多组数据散点图绘制
4.1 在一张图上绘制两组数据的散点
在实际数据分析中,经常需要在同一张图上绘制多组数据的散点,以便进行对比。前面已经展示了如何绘制两组不同颜色和标记的散点图,下面再通过一个更复杂的示例来加深理解。假设有两组学生的成绩数据,分别是数学成绩和语文成绩,想要在一张散点图上展示并对比:
i
import matplotlib.pyplot as plt
import numpy as np
# 生成两组学生成绩数据
np.random.seed(0)
math_scores1 = np.random.randint(60, 100, size=30)
chinese_scores1 = np.random.randint(50, 90, size=30)
math_scores2 = np.random.randint(70, 100, size=30)
chinese_scores2 = np.random.randint(60, 95, size=30)
# 绘制散点图
plt.scatter(math_scores1, chinese_scores1, c='red', marker='o', label='Class 1')
plt.scatter(math_scores2, chinese_scores2, c='blue', marker='s', label='Class 2')
plt.title('Comparison of Math and Chinese Scores')
plt.xlabel('Math Scores')
plt.ylabel('Chinese Scores')
plt.legend()
plt.show()

通过这个散点图,可以直观地比较两个班级学生的数学成绩和语文成绩之间的关系和差异。
4.2 使用颜色映射区分多组数据
当有多组数据时,除了使用不同颜色和标记区分,还可以使用颜色映射来表示不同的数据组。例如,假设有三组数据,分别用不同的颜色映射范围来表示:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
x1 = np.random.rand(30)
y1 = np.random.rand(30)
x2 = np.random.rand(30) + 0.5
y2 = np.random.rand(30) + 0.5
x3 = np.random.rand(30) + 1
y3 = np.random.rand(30) + 1
# 生成对应的数据值用于颜色映射
values1 = np.random.rand(30)
values2 = np.random.rand(30) + 0.3
values3 = np.random.rand(30) + 0.6
plt.scatter(x1, y1, c=values1, cmap='Reds', label='Group 1')
plt.scatter(x2, y2, c=values2, cmap='Greens', label='Group 2')
plt.scatter(x3, y3, c=values3, cmap='Blues', label='Group 3')
plt.title('Scatter Plot with Colormaps for Multiple Groups')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.colorbar() # 添加颜色条
plt.show()

在这个示例中,为三组数据分别指定了不同的颜色映射('Reds'、'Greens'、'Blues'),并添加了颜色条来显示颜色与数据值的对应关系,这样可以更直观地区分不同的数据组及其数据分布情况。
五、总结与拓展
通过本文的学习,我们了解了Matplotlib散点图的基础绘制方法、参数定制、美化技巧以及多组数据的绘制和实战应用。散点图作为一种重要的数据可视化工具,在数据分析、机器学习等领域有着广泛的应用。 在实际应用中,可以根据具体的数据特点和分析目的,灵活运用Matplotlib的各种功能,进一步拓展散点图的应用。例如,结合线性回归分析在散点图上绘制拟合线,更准确地展示变量之间的关系;使用3D散点图展示三个变量之间的关系等。 Matplotlib还有许多其他的图表类型和高级功能等待我们去探索,希望本文能为你在数据可视化的道路上打下坚实的基础,让你能够更好地利用数据可视化来发现数据中的价值。

#筛选苹果
def judge_apple(size):
if size>=8:
return"好苹果"
return"坏苹果"
apple_size=9
result=judge_apple(apple_size)
print(result)
首先定义一个
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/l3390209923/article/details/144729569
def judge_apple(size):
函数,定义苹果的好坏评判标准size函数
然后
if size>=8:
return"好苹果"
return"坏苹果"
用if语句链接上面的定义函数
最后
apple_size=9
result=judge_apple(apple_size)
print(result)
对这个函数进行打印
得出结果

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐








所有评论(0)