Python利用matplotlib绘制散点图的新手教程


Posted in Python onNovember 05, 2020

前言

上篇文章介绍了使用matplotlib绘制折线图,参考:https://3water.com/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()

运行结果:

Python利用matplotlib绘制散点图的新手教程

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()

运行结果:

Python利用matplotlib绘制散点图的新手教程

在第一次绘制的散点图中,已经看出了点的大概分布情况,所以在使用figure()函数创建图像时,可以修改figsize参数调整图像尺寸,设置更好的图像比例。

在调用scatter()函数绘制散点图时,使用c='颜色'来设置点的颜色,使用s='大小'来设置点的大小,并设置label用于图例展示。

第一次的散点图中,x轴上没有显示所有的年份刻度,最后一个点已经分布到了图形的右上角,所以使用xticks()和yticks()来设置x轴和y轴的刻度标签和范围。

使用xlabel()和ylabel()设置x轴和y轴的标签,说明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()

运行结果:

Python利用matplotlib绘制散点图的新手教程

上一张散点图中已经对数据作了基本的展示,为了使数据展示效果更好,可以对散点图进行美化。

数据是历年双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()

运行结果:

Python利用matplotlib绘制散点图的新手教程

散点图的作用主要是用于分析数据的趋势,用于预测未来的数据。比如我想预测2020年天猫双11的总成交额,通过对比的方式,简单分析一下这个趋势更接近指数函数还是更接近多次函数。

在散点图中,我绘制了两条曲线,y=2^x和y=x^(3.4),一条是2为底的指数函数,一条是x的3.4次方(三次函数ax^3+bx^2+cx+d),可以看到双11总成交额的变化趋势更接近三次函数。

这里我只是简单对比一下,三次函数还有二次项、一次项和常数项,所以x^(3.4)中的0.4可以通过二次项、一次项和常数项来补充,指数函数的变化趋势太快,与双11总成交额的变化趋势差异很大。这种简单对比是很粗糙的,只是为了说明散点图可以用于分析趋势。真实的分析不能简单看每年的数据,需要考虑很多因素(甚至因为某个因素的加入,成交额已经快到天花板了,很可能后面会下降)。

总结

到此这篇关于Python利用matplotlib绘制散点图的文章就介绍到这了,更多相关Python matplotlib绘制散点图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python不规范的日期字符串处理类
Jun 10 Python
Python实现端口复用实例代码
Jul 03 Python
python实现发送和获取手机短信验证码
Jan 15 Python
python字符串string的内置方法实例详解
May 14 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
详解flask入门模板引擎
Jul 18 Python
Python异常处理操作实例详解
Aug 28 Python
Python常用爬虫代码总结方便查询
Feb 25 Python
Python3模拟登录操作实例分析
Mar 12 Python
python实现手机销售管理系统
Mar 19 Python
Python 3.8新特征之asyncio REPL
May 28 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 #Python
Python word文本自动化操作实现方法解析
Nov 05 #Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 #Python
Python中用xlwt制作表格实例讲解
Nov 05 #Python
如何利用pycharm进行代码更新比较
Nov 04 #Python
python产生模拟数据faker库的使用详解
Nov 04 #Python
Django配置跨域并开发测试接口
Nov 04 #Python
You might like
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php实现中文转数字
2016/02/18 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
jquery ajax提交表单数据的两种实现方法
2010/04/29 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
Bootstrap登陆注册页面开发教程
2016/07/12 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
python简单分割文件的方法
2015/07/30 Python
Python字典简介以及用法详解
2016/11/15 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
python代码 输入数字使其反向输出的方法
2018/12/22 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
详解Python中的文件操作
2021/01/14 Python
pip install命令安装扩展库整理
2021/03/02 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
关于工作经历的证明书
2014/10/11 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
小学英语教学反思范文
2016/02/15 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL
服务器SVN搭建图文安装过程
2022/06/21 Servers