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设计模式编程中建造者模式的使用
Mar 02 Python
使用python调用zxing库生成二维码图片详解
Jan 10 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
python 字符串和整数的转换方法
Jun 25 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python实现维吉尼亚加密法
Mar 20 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
Python安装selenium包详细过程
Jul 23 Python
对Django url的几种使用方式详解
Aug 06 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
javascript for循环设法提高性能
2010/02/24 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
解决ionic和angular上拉加载的问题
2017/08/03 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
Python数据类型详解(二)列表
2016/05/08 Python
Django配置文件代码说明
2019/12/04 Python
Python和Sublime整合过程图示
2019/12/25 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
霸王洗发水广告词
2014/03/14 职场文书
请假条格式范文
2014/04/10 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
小学大队长竞选稿
2015/11/20 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript