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中getattr函数和hasattr函数作用详解
Jun 14 Python
python中函数传参详解
Jul 03 Python
python 3.5下xadmin的使用及修复源码bug
May 10 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
解决python Markdown模块乱码的问题
Feb 14 Python
Python输出指定字符串的方法
Feb 06 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
python如何删除列为空的行
Jul 17 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 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
php代码架构的八点注意事项
2016/01/25 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
js 设置缓存及获取设置的缓存
2014/05/08 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
2016/12/12 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
vue车牌号校验和银行校验实战
2019/01/23 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
Python中输出ASCII大文字、艺术字、字符字小技巧
2015/04/28 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Python实现k-means算法
2018/02/23 Python
Django实现分页功能
2018/07/02 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
Unix如何添加新的用户
2014/08/20 面试题
毕业自我评价范文
2013/11/17 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
干部考核工作总结
2015/08/12 职场文书
JS ES6异步解决方案
2021/04/29 Javascript
python 进阶学习之python装饰器小结
2021/09/04 Python
在Python 中将类对象序列化为JSON
2022/04/06 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers