Python matplotlib散点图绘制与优化实战:从基础到趋势分析
本文详解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绘制散点图的相关内容,请搜索本站过往文章或继续浏览后续文章。希望大家今后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













