了解Matplotlib散点图:从0开始的散点图绘制

目录

引言

一、散点图基础

1.1散点图的定义概念

1.2绘制简单散点图

1.3 plt.scatter()函数参数详解

1.4scatter函数及其说明

二、散点图的进阶学习

2.1改变散点颜色和透明度

2.2 添加图例

2.3 调整散点大小和标记样式

2.4 设置坐标轴范围和刻度

三、散点图的实用性

3.1 分析体重与身高的关系

3.2 研究销售额与广告支出的关联

四、多组数据散点图绘制

4.1 在一张图上绘制两组数据的散点

4.2 使用颜色映射区分多组数据

五、总结与拓展


引言

在数据可视化的领域中,散点图是一种强大且直观的工具,它能够帮助我们洞察数据之间的关系、分布模式以及潜在的趋势。Python的Matplotlib库提供了丰富的功能,让绘制散点图变得轻而易举。无论是探索数据的相关性,还是发现数据中的异常值,Matplotlib散点图都能成为你的得力助手。本文将从基础的散点图绘制开始,逐步深入到更高级的定制与应用,带你全面掌握Matplotlib散点图的绘制技巧。

一、散点图基础

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还有许多其他的图表类型和高级功能等待我们去探索,希望本文能为你在数据可视化的道路上打下坚实的基础,让你能够更好地利用数据可视化来发现数据中的价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值