Python利用matplotlib绘制折线图的新手教程


Posted in Python onNovember 05, 2020

前言

matplotlib是Python中的一个第三方库。主要用于开发2D图表,以渐进式、交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力。

一、安装matplotlib

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

二、matplotlib图像简介

matplotlib的图像分为三层,容器层、辅助显示层和图像层。

1. 容器层主要由Canvas、Figure、Axes组成。

Canvas位于图像的最底层,充当画布的作用。

Figure位于Canvas之上,指画布上的一整张图像。

Axes位于Figure之上,指Figure中的单个图表,一个Figure中可以有一个或多个Axes,即一张图像中可以有一个或多个图表。

2. 辅助显示层是单个图表(Axes)中用来提供辅助信息的层。

辅助显示层主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。

辅助层可使图像显示更加直观,提高可读性。

3. 图像层指Axes内通过plot、scatter、bar、histogram、pie等函数绘制出的图形。

三、matplotlib绘制折线图

# coding=utf-8
import matplotlib.pyplot as plt
 
 
plt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3',
  '3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
plt.plot(game, scores)
plt.show()

运行结果:

Python利用matplotlib绘制折线图的新手教程

figure(): 创建图像并设置图像的大小等属性,返回一张图像,可以传入很多参数,常用参数有两个。figsize参数传入一个元组(width, height),设置图像的大小。dpi传入一个整数值,设置图像的清晰度。

plot(): matplotlib中绘制折线图的函数。可以传入很多参数,一般传入两个列表,分别是折线图中的x值和y值。上面的例子中用了NBA2020年季后赛James的得分数据。

show(): 展示图像。

在上面的图表中,x坐标值中有中文,首次使用matplotlib绘图时中文无法正常显示。要解决中文显示问题,需要下载安装SimHei字体,下载链接:https://www.zitijia.com/i/281258939050380345.html,或直接搜索SimHei然后找一个正确的网站下载。下载完成后,在Windows下直接解压双击安装。安装完成后删除~/.matplotlib中的缓存文件,并创建配置文件matplotlibrc,将matplotlibrc中的内容设置为如下内容。

font.family   : sans-serif
font.sans-serif  : SimHei
axes.unicode_minus : False

操作命令如下截图,完成后图像中就可以正常显示中文了。

Python利用matplotlib绘制折线图的新手教程

使用上面的代码,已经实现了简单的折线图,但展示的效果很差,所以需要进行优化,使图像展示得更好。

四、matplotlib优化折线图

import matplotlib.pyplot as plt
 
 
plt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3',
  '3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
plt.plot(game, scores, c='red')
plt.scatter(game, scores, c='red')
y_ticks = range(50)
plt.yticks(y_ticks[::5])
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("赛程", fontdict={'size': 16})
plt.ylabel("得分", fontdict={'size': 16})
plt.title("NBA2020季后赛詹姆斯得分", fontdict={'size': 20})
plt.show()

运行结果:

Python利用matplotlib绘制折线图的新手教程

在使用plot()函数绘图时,可以通过c='颜色'来设置折线图的颜色。

scatter(): 绘制散点图。折线图是用直线连接相邻的两个点形成的,但是连成折线后点的显示不明显。scatter可以单独对点进行设置,展示得更明显。

yticks(): 用于设置y轴坐标的范围,传入一个可迭代对象(如range()函数)。最开始绘制的折线图中,图像的y轴坐标范围是数据的范围,坐标原点不是0,使用yticks函数可以设置想要的坐标范围。同理xticks可以用于设置x轴坐标的范围。

grid(): 用于设置图表中的网格线,使用linestyle参数设置网格线的样式,常用的样式有下表中的几种,plot()函数中也可以用linestyle参数设置折线图的样式。使用alpha参数设置网格线的透明度。

样式字符实线- 虚线- - 点划线-.点虚线: 

xlabel(): 用于设置x轴的标签,说明x轴坐标的含义,第一个参数传入需要设置的标签值,后面可以通过其他参数设置显示的效果,如字体大小等。ylabel同理。

title(): 用于设置折线图的标题,说明这张折线图展示的数据。用法同xlabel。

五、matplotlib绘制多条折线图

import matplotlib.pyplot as plt
 
 
plt.figure(figsize=(20, 10), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3',
  '3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14]
assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10]
plt.plot(game, scores, c='red', label="得分")
plt.plot(game, rebounds, c='green', linestyle='--', label="篮板")
plt.plot(game, assists, c='blue', linestyle='-.', label="助攻")
plt.scatter(game, scores, c='red')
plt.scatter(game, rebounds, c='green')
plt.scatter(game, assists, c='blue')
plt.legend(loc='best')
plt.yticks(range(0, 50, 5))
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlabel("赛程", fontdict={'size': 16})
plt.ylabel("数据", fontdict={'size': 16})
plt.title("NBA2020季后赛詹姆斯数据", fontdict={'size': 20})
plt.show()

运行结果:

Python利用matplotlib绘制折线图的新手教程

要在同一张图像中展示多条折线图,多次调用plot()函数就行。每条折线图的颜色、样式等可以分别设置,以便更好地进行区分。

legend(): 展示图例,通过loc参数传入图例在图表中展示的位置,可以传入的值有‘best', 'upper right', 'upper left', 'lower left', 'lower right', 'right', 'center left', 'center right', 'lower center', 'upper center', 'center',这十一个值分别对应数字0~10,传值时也可以传对应的数字,后面十个值都指定了图例的位置,'best'表示自适应,会自动根据图像的分布在后面的十个值中选择一个,大部分为右上角'upper right'。

为了使用图例,在每次调用plot()函数绘制折线图时,需要使用label参数给折线图添加标签,在图例中展示。有多条折线图时,图例可以用于区分每条折线图表示的含义,如将James的得分和篮板、助攻展示在同一张图中。

六、matplotlib绘制多张折线图

import matplotlib.pyplot as plt
 
 
fig, axs = plt.subplots(nrows=1, ncols=3, figsize=(20, 6), dpi=100)
game = ['1-G1', '1-G2', '1-G3', '1-G4', '1-G5', '2-G1', '2-G2', '2-G3', '2-G4', '2-G5', '3-G1', '3-G2', '3-G3',
  '3-G4', '3-G5', '总决赛-G1', '总决赛-G2', '总决赛-G3', '总决赛-G4', '总决赛-G5', '总决赛-G6']
scores = [23, 10, 38, 30, 36, 20, 28, 36, 16, 29, 15, 26, 30, 26, 38, 34, 33, 25, 28, 40, 28]
rebounds = [17, 6, 12, 6, 10, 8, 11, 7, 15, 11, 6, 11, 10, 9, 16, 13, 9, 10, 12, 13, 14]
assists = [16, 7, 8, 10, 10, 7, 9, 5, 9, 7, 12, 4, 11, 8, 10, 9, 9, 8, 8, 7, 10]
y_data = [scores, rebounds, assists]
colors = ['red', 'green', 'blue']
line_style = ['-', '--', '-.']
y_labels = ["得分", "篮板", "助攻"]
for i in range(3):
 axs[i].plot(game, y_data[i], c=colors[i], label=y_labels[i], linestyle=line_style[i])
 axs[i].scatter(game, y_data[i], c=colors[i])
 axs[i].legend(loc='best')
 axs[i].set_yticks(range(0, 50, 5))
 axs[i].grid(True, linestyle='--', alpha=0.5)
 axs[i].set_xlabel("赛程", fontdict={'size': 16})
 axs[i].set_ylabel(y_labels[i], fontdict={'size': 16}, rotation=0)
 axs[i].set_title("NBA2020季后赛詹姆斯{}".format(y_labels[i]), fontdict={'size': 20})
fig.autofmt_xdate()
plt.show()

运行结果:

Python利用matplotlib绘制折线图的新手教程

subplots(): 用于在同一张图像中绘制多张图表,通过nrows, ncols两个参数设置图表的张数和排列方式,figsize和dpi同figure()函数。subplots()函数返回两个参数,一个是图像对象fig,一个是可迭代的图表数组axs(类型为numpy中的数组对象)。

每一张图表中的标签、标题、样式、图例等都需要单独设置,为了避免代码过于冗余,可以使用循环。绘制每一张图表时,从axs中取出每一张图表,再调用plot()函数绘图。在设置坐标轴、标签、标题时,使用'set_'开头的方法进行设置,如设置x轴标签用set_xlabel()。

autofmt_xdate(): x轴坐标值自适应倾斜。因为一张图像中有多张图表,x坐标值靠得很近,可能会因重叠造成展示效果差,使用fig对象的autofmt_xdate()方法可以设置自适应倾斜。

以上就是matplotlib实现折线图的简单介绍,更多设置可以参考官网https://matplotlib.org/tutorials/index.html,并多作尝试。

总结

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

Python 相关文章推荐
Python开发常用的一些开源Package分享
Feb 14 Python
python统计字符串中指定字符出现次数的方法
Apr 04 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python传递参数的多种方式(小结)
Sep 18 Python
3行Python代码实现图像照片抠图和换底色的方法
Oct 10 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
关于Django Models CharField 参数说明
Mar 31 Python
基于python实现操作git过程代码解析
Jul 27 Python
python爬取代理ip的示例
Dec 18 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
详解Django中异步任务之django-celery
Nov 05 #Python
Python Django路径配置实现过程解析
Nov 05 #Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 #Python
Python利用matplotlib绘制散点图的新手教程
Nov 05 #Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 #Python
Python word文本自动化操作实现方法解析
Nov 05 #Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 #Python
You might like
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
JS实现日期时间动态显示的方法
2015/12/07 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python正则分组的应用
2013/11/10 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python tkinter控件布局项目实例
2019/11/04 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
如何写出高性能的JSP和Servlet
2013/01/22 面试题
2014年党支部承诺书
2014/05/30 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
react中的DOM操作实现
2021/06/30 Javascript
Java死锁的排查
2022/05/11 Java/Android