Python matplotlib散点图绘制与优化实战:从基础到趋势分析

一只小鹿
一只小鹿
发布时间:2026-10-14| 6人浏览过
原创

本文详解Python中matplotlib库绘制散点图的方法。从基础绘图入手,逐步讲解如何优化图表尺寸、颜色、大小及标签,实现数据可视化美化。通过天猫双11成交额案例,演示如何利用散点图对比指数与多项式趋势,辅助数据预测分析。

前言与概述

前言

在上一篇介绍折线图绘制的文章中,我们探讨了matplotlib的基本用法(参考链接:https://www.jb51.net/article/198991.htm)。本文将延续这一主题,深入讲解如何使用matplotlib绘制散点图,并展示其进阶应用。

基础散点图绘制

一、matplotlib绘制散点图


# coding=utf-8
import matplotlib.pyplot as plt
 
 
years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
turnovers = [0.5, 9.36, 52, 191, 350, 571, 912, 1027, 1682, 2135, 2684]
plt.figure(figsize=(10, 10), dpi=100)
plt.scatter(years, turnovers)
plt.show()

运行结果:

scatter()是matplotlib中用于绘制散点图的核心函数。该函数支持传入多个参数,通常至少需要两个列表,分别代表散点图中的x轴和y轴数据。在上述示例中,我们使用了2009年至2019年这十一年间天猫双11的总成交额数据作为输入。

散点图通过提供的两组数据,在坐标系中生成多个数据点。通过观察这些点的分布情况,可以分析两个变量之间是否存在关联性,或总结数据的分布趋势,从而为预测数据走向提供依据。

虽然上述代码已经成功绘制出简单的散点图,但仅展示数据点而缺乏其他视觉信息,导致图表内容不完整,因此需要对其进行进一步优化。

散点图优化技巧

二、matplotlib优化散点图


import matplotlib.pyplot as plt
 
 
years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
turnovers = [0.5, 9.36, 52, 191, 350, 571, 912, 1027, 1682, 2135, 2684]
plt.figure(figsize=(10, 15), dpi=100)
plt.scatter(years, turnovers, c='red', s=100, label='成交额')
plt.xticks(range(2008, 2020, 1))
plt.yticks(range(0, 3200, 200))
plt.xlabel("年份", fontdict={'size': 16})
plt.ylabel("成交额", fontdict={'size': 16})
plt.title("历年天猫双11总成交额", fontdict={'size': 20})
plt.legend(loc='best')
plt.show()

运行结果:

在初次绘制的散点图中,虽然能大致看出点的分布情况,但在调用figure()函数创建图像时,建议通过修改figsize参数来调整图像尺寸,从而获得更佳的视觉比例。

在调用scatter()函数绘制散点图时,可以通过设置c='颜色'来指定数据点的颜色,使用s='大小'来调整点的大小,并设置label参数以在图例中显示标签。

在初始散点图中,x轴未能显示所有年份刻度,且最后一个数据点延伸至图形右上角。为此,可以使用xticks()和yticks()函数来设置x轴和y轴的刻度标签及范围,确保数据清晰展示。

使用xlabel()和ylabel()函数分别设置x轴和y轴的标签,以明确坐标轴的含义。同时,利用title()函数为散点图添加标题,说明所展示的数据内容。最后,通过legend()函数展示图例,增强图表的可读性。

经过上述优化,一张功能完整、信息丰富的散点图便制作完成。

颜色与大小的可视化增强

三、matplotlib散点图区分点的颜色和大小


import matplotlib.pyplot as plt
import numpy as np
 
 
years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
turnovers = [0.5, 9.36, 52, 191, 350, 571, 912, 1027, 1682, 2135, 2684]
plt.figure(figsize=(10, 15), dpi=100)
size = list()
for tur in turnovers:
 size.append(tur) if tur > 100 else size.append(100)
plt.xticks(range(2008, 2020, 1))
plt.yticks(range(0, 3200, 200))
plt.scatter(years, turnovers, c=np.random.randint(0, 50, 11), s=size)
plt.xlabel("年份", fontdict={'size': 16})
plt.ylabel("成交额", fontdict={'size': 16})
plt.title("历年天猫双11总成交额", fontdict={'size': 20})
plt.show()

运行结果:

在前一张散点图中,我们已经对数据进行了基本展示。为了进一步提升数据展示效果,可以对散点图进行美化处理。

由于数据代表历年双11的总成交额,每年的数据相互独立,可以使用不同的颜色来区分。这里利用numpy库中的random.randint()函数随机生成11个值,并将这11个随机值传递给scatter()函数中的c参数,使每个数据点的颜色各不相同,从而更好地体现每个点的独立性。


pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

成交额随年份变化,为了在散点图中体现大小差异,可以根据成交额的大小设置点的大小。具体做法是将成交额直接作为点的大小参数(对于较小的成交额,设定一个最小值,确保图形中的点不小于该值),得到一个包含11个值的列表,并传递给scatter()函数中的s参数。这样可以直观地体现每个点的大小差异,即成交额越大,对应的点也越大。

基于散点图的趋势分析

四、matplotlib散点图的趋势简单分析


import matplotlib.pyplot as plt
import numpy as np
import math
 
 
years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
turnovers = [0.5, 9.36, 52, 191, 350, 571, 912, 1027, 1682, 2135, 2684]
squares = [math.pow(year-2008, 3.3) for year in years]
powers = [math.pow(2, year-2008) for year in years]
plt.figure(figsize=(10, 15), dpi=100)
size = list()
for tur in turnovers:
 size.append(tur) if tur > 100 else size.append(100)
plt.xticks(range(2008, 2020, 1))
plt.yticks(range(0, 3200, 200))
plt.scatter(years, turnovers, c=np.random.randint(0, 50, 11), s=size, label='成交额')
plt.plot(years, squares, color='red', label='x^3.4')
plt.plot(years, powers, color='blue', label='2^n')
plt.legend(loc='best', fontsize=16, markerscale=0.5)
plt.xlabel("年份", fontdict={'size': 16})
plt.ylabel("成交额", fontdict={'size': 16})
plt.title("历年天猫双11总成交额", fontdict={'size': 20})
plt.show()

运行结果:

散点图的主要作用在于分析数据趋势,进而预测未来数据。例如,若要预测2020年天猫双11的总成交额,可以通过对比分析,初步判断这一趋势更接近指数函数还是多次函数。

在散点图中,我们绘制了两条曲线:y=2^x和y=x^(3.4)。其中,y=2^x是以2为底的指数函数,而y=x^(3.4)是x的3.4次方函数(可视为三次函数ax^3+bx^2+cx+d的一种形式)。通过对比可见,双11总成交额的变化趋势更接近三次函数。

此处仅为简单对比。实际上,三次函数还包含二次项、一次项和常数项,因此x^(3.4)中的0.4部分可以通过这些项进行补充。相比之下,指数函数的变化趋势过快,与双11总成交额的实际变化趋势存在较大差异。这种简单对比虽然粗糙,但旨在说明散点图可用于分析趋势。真实的分析不能仅看每年的数据,还需考虑多种因素(甚至可能因某些因素导致成交额接近天花板,未来可能出现下降)。

总结

总结

至此,关于Python利用matplotlib绘制散点图的教程介绍完毕。如需了解更多Python matplotlib绘制散点图的相关内容,请搜索本站过往文章或继续浏览后续文章。希望大家今后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。