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批量提取word内信息
Aug 09 Python
python正则分析nginx的访问日志
Jan 17 Python
python实现归并排序算法
Nov 22 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
pycharm debug 断点调试心得分享
Apr 16 Python
Python自动化爬取天眼查数据的实现
Jun 15 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
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
微信小程序实现刷脸登录
2018/05/25 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python实现计算最小编辑距离
2016/03/17 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
Python学习思维导图(必看篇)
2017/06/26 Python
Django在win10下的安装并创建工程
2017/11/20 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python创建或生成列表的操作方法
2019/06/19 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
python exit出错原因整理
2020/08/31 Python
工作自我评价分享
2013/12/01 职场文书
外企求职信范文分享
2013/12/31 职场文书
机械个人求职信范文
2014/01/24 职场文书
酒店端午节促销方案
2014/02/18 职场文书
聚美优品广告词改编
2014/03/14 职场文书
敬老模范事迹
2014/05/21 职场文书
私人委托书格式
2014/09/10 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle