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 调用DLL操作抄表机
Jan 12 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
python3跳出一个循环的实例操作
Aug 18 Python
用Python实现职工信息管理系统
Dec 30 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
Python入门学习之类的相关知识总结
May 25 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 strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
PHP里的单例类写法实例
2015/06/25 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
python与caffe改变通道顺序的方法
2018/08/04 Python
python列表list保留顺序去重的实例
2018/12/14 Python
代码实例讲解python3的编码问题
2019/07/08 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
建筑总经理岗位职责
2014/02/02 职场文书
保护地球的标语
2014/06/17 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
2014年店长工作总结
2014/11/17 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
工程进度款催款函
2015/06/24 职场文书
英语教学课后反思
2016/02/15 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python