python绘图模块matplotlib示例详解


Posted in Python onJuly 26, 2019

前言

Matplotlib 是 Python 的绘图库。作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的,所以最近学习了一下Matplotlib模块,将该模块的常用的绘图手段和大家分享一下,提高大家在工作中的效率;

在示例中,我们主要用到Matplotlib和Numpy这两个模块来为大家演示Python强大的绘图功能,相信大家通过我下面的10个示例,基本上可以满足大家日常工作的需求,再次强调一下,只是简单的用法,大家千万不要想通过这篇博客获取到太高深的用法。

下面进入正题

1、绘制一条直线

代码如下,下面的代码大家应该都可以看懂吧

# 导入常用的包
import numpy as np
import matplotlib.pyplot as plt
 
# 生成-1到1的数据,一共生成100个,也可以生成1到-1的数据,这些数据是平均分布的
# 定义x轴的数据
x = np.linspace(-1,1,100)
 
# 定义y轴的数据
y = x * 2 + 100
plt.plot(x,y)
 
# 显示图像
plt.show()

效果如下

python绘图模块matplotlib示例详解

2、创建一个画布,同时设置该画布的大小

代码如下

import numpy as np
 
import matplotlib.pyplot as plt
 
x = np.linspace(-1,1,100)
 
y1 = x * 2 + 100 
y2 = x ** 2
 
# 创建一个画布
 
# figsize:设置画布的大小
plt.figure(figsize=(2,2))
plt.plot(x,y1)
 
# 创建第二个画布
plt.figure()
plt.plot(x,y2)
 
plt.show()

效果如下,会同时显示两张画布

python绘图模块matplotlib示例详解

3、在一张画布中画两条线,同时可以设置线的颜色,宽度,和风格

代码如下

import numpy as np 
import matplotlib.pyplot as plt
 
x = np.linspace(-1,1,100) 
y1 = x * 2 + 0.5 
y2 = x ** 2 
 
# color:表示设置线的颜色
# linewidth:表示设置线的宽度
# linestyle:表示设置线的风格
plt.figure(figsize=(2,2))
plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--') 
plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-') 
plt.show() 
# 上面的效果就是2条曲线被放到一个画布中

效果如下

python绘图模块matplotlib示例详解

4、限制x轴,y轴的显示范围,为x轴和y轴添加描述,替换x轴和y轴的显示信息

代码如下

import numpy as np
import matplotlib.pyplot as plt
 
# 设置坐标轴
x = np.linspace(-3,3,100) 
y1 = x * 2 + 0.5 
y2 = x ** 2
 
plt.figure(figsize=(6,6))
plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--') 
plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')
 
# 限制x轴的显示范围
plt.xlim((-1,2))
 
# 限制y轴的显示范围
plt.ylim((-1,5))
 
# 给x轴加描述
plt.xlabel("xxxxxx")
# 给y轴加描述
plt.ylabel("yyyyyy") 
 
# 替换一下横坐标的显示
temp = np.linspace(-2,2,11)
plt.xticks(temp)
 
# 替换纵坐标的标签,用level0代替之前的-1
plt.yticks([-1,0,1,2,3,4,5],["level0","level1","level2","level3","level4","level5","level6"])
 
plt.show()

效果如下

python绘图模块matplotlib示例详解

5、对边框进行设置,调整x轴和y轴的位置

代码如下

import numpy as np
import matplotlib.pyplot as plt
 
# 设置坐标轴
x = np.linspace(-3,3,100)
 
y1 = x * 2 + 0.5
 
y2 = x ** 2 
 
plt.figure(figsize=(6,6))
plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')
 
plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')
 
# 限制x轴的显示范围
plt.xlim((-1,2))
 
# 限制y轴的显示范围
plt.ylim((-1,5))
 
# 给x轴加描述
plt.xlabel("xxxxxx")
# 给y轴加描述
plt.ylabel("yyyyyy") 
 
# 替换一下横坐标的显示
temp = np.linspace(-2,2,11)
plt.xticks(temp)
 
# 替换纵坐标的标签,用level0代替之前的-1
# plt.yticks([-1,0,1,2,3,4,5],["level0","level1","level2","level3","level4","level5","level6"])
 
# 获取边框
ax = plt.gca()
# 设置右边框的颜色为红色
ax.spines["right"].set_color("r")
 
# 去掉上边框
ax.spines["top"].set_color(None)
 
# 把x轴的刻度设置为bottom
ax.xaxis.set_ticks_position("bottom")
# 把y轴的客户设置为left
ax.yaxis.set_ticks_position("left")
 
# 设置x和y交汇的点,x轴是0,y是也是0,也就是x轴和y轴的都是0点交汇
ax.spines["bottom"].set_position(("data",0))
ax.spines["left"].set_position(("data",0))
 
plt.show()

效果如下

python绘图模块matplotlib示例详解

6、为画布添加图例

代码如下

#Auther Bob
#--*--conding:utf-8 --*--
import numpy as np
 
import matplotlib.pyplot as plt
 
# 设置图例
x = np.linspace(-3, 3, 100)
y1 = x * 2 + 0.5 
y2 = x ** 2 
plt.figure(figsize=(6, 6))
 
# 首先要为两条线分别取名,这里的逗号必须要有
l1, = plt.plot(x, y1, color='r', linewidth=1.0, linestyle='--')
 
l2, = plt.plot(x, y2, color='b', linewidth=5.0, linestyle='-')
 
# handles控制图例中要说明的线
# labels为两条线分别取一个label
# loc控制图例的显示位置,一般用best,由代码为我们选择最优的位置即可
 
plt.legend(handles=[l1, l2], labels=["test1", "test2"], loc='best')
 
# 限制x轴的显示范围
plt.xlim((-1, 2))
 
# 限制y轴的显示范围
plt.ylim((-1, 5))
 
# 给x轴加描述
plt.xlabel("xxxxxx")
# 给y轴加描述
plt.ylabel("yyyyyy")
 
# 替换一下横坐标的显示
temp = np.linspace(-2, 2, 11)
plt.xticks(temp)
 
# 替换纵坐标的标签,用level0代替之前的-1
plt.yticks([-1, 0, 1, 2, 3, 4, 5], ["level0", "level1", "level2", "level3", "level4", "level5", "level6"])
 
# 为图像加一个图例,用来对图像做说明
plt.show()

效果如下

python绘图模块matplotlib示例详解

7、为图像添加描述

代码如下

import numpy as np
 
import matplotlib.pyplot as plt
 
# 为图像做标注
x = np.linspace(-3,3,100)
 
y1 = x * 2
 
# y2 = x ** 2
 
 
plt.figure(figsize=(6,6))
 
 
plt.plot(x,y1,color='r',linewidth=1.0,linestyle='-') 
 
# 给x轴加描述
plt.xlabel("xxxxxx")
# 给y轴加描述
plt.ylabel("yyyyyy")
 
# ======================================================
# 在x轴为x0,y轴为x0 * 2上画一个点,这个点的颜色是红色,大小为50,这个大小就是这个点显示的大小
x0 = 0.5
y0 = x0 * 2
# scatter是画点的方法
plt.scatter(x0,y0,color='g',s=50)
 
# 画线
# 这条线是第一个点的坐标为[x0,y0],第二个点的坐标为[x0,-6],后面就是设置线的风格,线的颜色,线的宽度
 
plt.plot([x0,x0],[y0,-6],color='k',linestyle='--',linewidth=1.0) 
 
# 画箭头和描述 
# xy代表我们的点
# xytext代码我们描述的位置,基于当前的点,在x轴+30,在y轴-30
# r'$2*x={n}$是我们要显示的文字信息,格式必须要这样
# textcoords表示作为起点
# fontsize表示设置字体大小
# arrowprops设置箭头
# arrowstyle设置箭头的样式
# connectionstyle设置风格.2表示弧度
plt.annotate(r'$2*0.5={n}$'.format(n = y0),xy=(x0,y0),xytext=(+30,-30),textcoords='offset points',fontsize=10,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
 
# 显示文字描述,从x轴为-1,y轴为2开始显示,$$中就是要显示的字符,这里如果要显示空格,则需要转义
# fontdict设置字体
plt.text(-1,2,r'$1\ 2\ 3\ 4$',fontdict={"size":16,"color":"r"})
 
# =========================================================
 
# 为图像加一个图例,用来对图像做说明 
plt.show()

效果如下

python绘图模块matplotlib示例详解

8、绘制散点图

代码如下

import numpy as np 
import matplotlib.pyplot as plt
 
# 绘制散点图
# plt.scatter(np.arange(1,10,1),np.arange(10,19,1))
 
# plt.scatter(np.linspace(-3,3,10),np.linspace(-3,3,10)) 
x = np.random.normal(1,10,500)
y = np.random.normal(1,10,500)
 
print(x)
# s设置点的大小
# c是颜色
# alpha是透明度
plt.scatter(x,y,s=50,c='b',alpha=0.5)
plt.show()

效果如下

python绘图模块matplotlib示例详解

9、绘制直方图

代码如下

import numpy as np 
import matplotlib.pyplot as plt 
 
# 绘制直方图
x = np.arange(10)
y = x ** 2 + 10 
 
# facecolor设置柱体的颜色
# edgecolor设置边框的颜色
 
plt.bar(x,y,facecolor='g',edgecolor='r')
 
# 绘制翻转过来的直方图
# plt.bar(x,-y)
 
#显示文字
for x,y in zip(x,y):
 plt.text(x,y,"{f}".format(f=y),ha="center",va='bottom')
plt.show()

效果如下

python绘图模块matplotlib示例详解

10、一张画布显示多张图像

代码如下

#Auther Bob
#--*--conding:utf-8 --*--
import numpy as np
import matplotlib.pyplot as plt
 
# plt.figure()
# 有一个两行两列的单元格,这个位于第一个单元格
# plt.subplot(2,2,1)
 
# 画一条【0,0】-----》【1,1】的直线
# plt.plot([0,1],[0,1])
 
 
# 有一个两行两列的单元格,这个位于第一个单元格
# plt.subplot(2,2,2)
 
# 画一条【0,0】-----》【1,1】的直线
# plt.plot([0,1],[0,1])
 
 
# 有一个两行两列的单元格,这个位于第一个单元格
# plt.subplot(2,2,3)
 
# 画一条【0,0】-----》【1,1】的直线
# plt.plot([1,0],[0,1])
# plt.show()
 
# 上面的例子,每张图他显示的大小是一样的,我们想显示不同的大小该怎么办?
 
plt.figure()
# 有一个两行三列的单元格,这个位于第一个单元格
plt.subplot(2,1,1)
 
# 画一条【0,0】-----》【1,1】的直线
plt.plot([0,1],[0,1]) 
 
# 有一个两行三列的单元格,这个位于第四个单元格,因为第一个单元格占了3个位子,所以这里就是第四个
plt.subplot(2,3,4)
 
# 画一条【0,0】-----》【1,1】的直线
plt.plot([0,1],[0,1]) 
 
# 有一个两行三列的单元格,这个位于第五个单元格
plt.subplot(2,3,5)
 
# 画一条【0,0】-----》【1,1】的直线
plt.plot([1,0],[0,1])
plt.show()

效果如下

python绘图模块matplotlib示例详解

11、matplotlib模块中的颜色和线条风格

作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值。 可以使用以下格式化字符。

字符 描述
'-' 实线样式
'--' 短横线样式
'-.' 点划线样式
':' 虚线样式
'.' 点标记
',' 像素标记
'o' 圆标记
'v' 倒三角标记
'^' 正三角标记
'<' 左三角标记
'>' 右三角标记
'1' 下箭头标记
'2' 上箭头标记
'3' 左箭头标记
'4' 右箭头标记
's' 正方形标记
'p' 五边形标记
'*' 星形标记
'h' 六边形标记 1
'H' 六边形标记 2
'+' 加号标记
'x' X 标记
'D' 菱形标记
'd' 窄菱形标记
'|' 竖直线标记
'_' 水平线标记

以下是颜色的缩写:

字符 颜色
'b' 蓝色
'g' 绿色
'r' 红色
'c' 青色
'm' 品红色
'y' 黄色
'k' 黑色
'w' 白色

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python里大整数相乘相关技巧指南
Sep 12 Python
初步介绍Python中的pydoc模块和distutils模块
Apr 13 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Python简单基础小程序的实例代码
Apr 28 Python
python 对字典按照value进行排序的方法
May 09 Python
Python+OpenCV实现实时眼动追踪的示例代码
Nov 11 Python
postman和python mock测试过程图解
Feb 22 Python
基于Pyinstaller打包Python程序并压缩文件大小
May 28 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 #Python
基于Django ORM、一对一、一对多、多对多的全面讲解
Jul 26 #Python
Django Rest framework频率原理与限制
Jul 26 #Python
Django 使用easy_thumbnails压缩上传的图片方法
Jul 26 #Python
解决django服务器重启端口被占用的问题
Jul 26 #Python
深入解析神经网络从原理到实现
Jul 26 #Python
python单例模式的多种实现方法
Jul 26 #Python
You might like
谈谈关于php的优点与缺点
2013/04/11 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
一个简单的php路由类
2016/05/29 PHP
PHP序列化操作方法分析
2016/09/28 PHP
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
What is view? why do we have view?
2012/06/22 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
诚信考试承诺书
2014/03/27 职场文书
幼儿园小班教师寄语
2014/04/03 职场文书
财务审计整改报告
2014/11/06 职场文书
社区结对共建协议书
2016/03/23 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技