python数据分析工具之 matplotlib详解


Posted in Python onApril 09, 2020

不论是数据挖掘还是数学建模,都免不了数据可视化的问题。对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图。它不但提供了一整套和 Matlab 相似但更为丰富的命令,让我们可以非常快捷地用 python 可视化数据。

matplotlib基础

# 安装
pip install matplotlib

两种绘图风格

MATLAB风格:

基本函数是 plot,分别取 x,y 的值,然后取到坐标(x,y)后,对不同的连续点进行连线。

面向对象:

创建一个图形 fig 和一个坐标 ax 。

  • fig:figure(plt.Figure) 是一个能容纳各种坐标轴,图形,文字和标签的容器。
  • ax:axes(plt.Axes) 是一个带有刻度和标签的矩形,最终会包含各种可视化元素。

示例:

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

# 创建fig和ax
fig = plt.figure()
ax = plt.axes()

x = np.linspace(0,10,100)
# 显示sin函数图形
plt.plot(x, np.sin(x))
# 显示cos函数图形
plt.plot(x, np.cos(x))

plt.show()

python数据分析工具之 matplotlib详解

这就是利用面向对象的方式绘图,在交互模式中可以看到,每画一个图就是产生一个对象,最后再显示出来。

python数据分析工具之 matplotlib详解

绘图样式

python数据分析工具之 matplotlib详解

# 调整坐标轴上下限
plt.xlim([xmin, xmax])
plt.ylim([ymin, ymax])

plt.axis([xmin, xmax, ymin, ymax])
# 参数:tight:把图形设置成紧凑模式,不留多余的部分
# equal:图形显示分辨率为1:1

线形图

文字设置

图形标题:plt.title

坐标轴标题:plt.xlabel, plt.ylabel

基础图例:plt.legend

注意:对中文不友好,需要额外方法,尽量使用英文

# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)
plt.plot(x, np.sin(x))
plt.title('sin-function')
plt.xlabel('x-value')
plt.ylabel('y-label')
plt.show()

python数据分析工具之 matplotlib详解

图例

通过legend可以设置图例,同时通过参数的调整可以细腻的设置图例的位置、形式等。参数主要包括:

  • loc:图例的位置
  • frameon:是否带边框
  • framealpha:颜色透明
  • shadow:阴影
# 示例
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)

fig, ax = plt.subplots()

ax.plot(x, np.sin(x), color='red', label='sin-function')
ax.plot(x, np.cos(x), color='blue', label='cos-function')

ax.legend(loc='upper right', frameon=True, shadow=True, framealpha=0.2)
# 设置图例位置为右上,有边框,有阴影,且透明度为0.2

plt.show()

python数据分析工具之 matplotlib详解

颜色条

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 10, 100)
I = np.sin(x) * np.cos(x[:,np.newaxis])

plt.imshow(I)
plt.colorbar()
plt.show()

python数据分析工具之 matplotlib详解

散点图

散点图基础

散点图主要以点为主,数据是不连续的数据,通过设置线的型号来完成。型号包括‘o'、‘+'、‘*'、‘1'、‘h'、‘D'等等,具体使用探索一下就好,用不到太多。

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
y = np.sin(x)

# 通过设置线型为点来完成散点图的绘制
plt.plot(x, y, 'o', color='blue')
plt.show()

python数据分析工具之 matplotlib详解

如果设置线型为点线结合,那么将绘制出连续的线,对应点处为所设置的点型。

画散点图还可以使用scatter函数来画,他有很多更细节的描述,用法与plot类似,对于数据量较大的可视化时,plot的效率更高一些。

误差线

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
dy = x * 0.5
y = np.sin(x) + dy

plt.errorbar(x, y, yerr=dy, fmt='.k', ecolor='blue')
plt.show()

python数据分析工具之 matplotlib详解

连续误差线表示的是连续量,可以使用 plt.plot 和 plt.fill_between 来画出。

import matplotlib.pyplot as plt
import numpy as np

# 图形显示风格
plt.style.use('seaborn-whitegrid')

x = np.linspace(0, 10, 30)
ysin = np.sin(x)
ycos = np.cos(x)

plt.plot(x, ysin, color='red')
plt.plot(x, ycos, color='blue')

plt.fill_between(x, ysin, ycos, color='gray', alpha=0.2)
plt.show()

python数据分析工具之 matplotlib详解

等高线(密度)

  • plt.contour   等高线
  • plt.contourf  自带填充颜色
  • plt.imshow   显示图形

等高线绘制方法:z = f(x,y),z表示高度。当只有一个颜色绘图时,虚线表示负值,实线表示正值。meshgrid 可以将一维数据变成二维网格数据。

import matplotlib.pyplot as plt
import numpy as np

def f(x, y):
 return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

# 得到网格点矩阵
x, y =np.meshgrid(x, y)

# 计算z轴的值
z = f(x, y)

# 绘制图形
plt.contour(x, y, z, colors='green')
# plt.contour(x, y, z, 50, cmap='RdGy') # 更改配色,值50等分,红灰配色
plt.show()

python数据分析工具之 matplotlib详解

python数据分析工具之 matplotlib详解

plt.contourf(x, y, z, 50, cmap='RdGy') # 改为contourf,自动填充颜色,则变为连续的

python数据分析工具之 matplotlib详解

直方图

基本画法:plt.hist 可以直接画直方图,参数主要包括:

  • bins:划分段(柱数)
  • color:颜色
  • alpha:透明度
  • histtype:图类型
import matplotlib.pyplot as plt
import numpy as np

data = np.random.randn(1000)
plt.hist(data, bins=30, alpha=0.3, histtype='stepfilled', color='blue', edgecolor='none')
plt.show()

python数据分析工具之 matplotlib详解

程序中 random.randn random.rand 相比,randn表示随机生成的数符合正态分布,因此画出图来是如上图所示。

子图

plt.subplot(2,1,1) # 子图,(2,1,1)代表,创建2*1的画布,并且定位于画布1 ;等效于plt.subplot(211),即去掉逗号
# subplots 可以同时创建多个子图
figure,ax = plt.subplots(2, 3) 
# 这是一个灵活创建子图的方法,可以创建任意组合的图形,不必一一对齐,以下为示例:
grid = plt.GridSpec(2, 3, wspace=0.3, hspace=0.2)
plt.subplot(grid[,:2])
plt.subplot(grid[1,1:3])

python数据分析工具之 matplotlib详解

图例配置

文字注释

通过不同的坐标变换,可以把文字放在不同的位置:

  • ax.transData:以数据为基准
  • ax.transAxes:以轴为基准
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
ax.axis = ([0, 1, 0, 1])

ax.text(0.5, 0.5, "Data:(0.5, 0.5)", transform=ax.transData)
ax.text(0.5, 0.1, "Axes:(0.5, 0.1)", transform=ax.transAxes)
plt.show()

python数据分析工具之 matplotlib详解

箭头注释

  • plt.arrow:产生SVG向量图形式的箭头,会随着分辨率改变而改变,不推荐
  • plt.annotate:可以创建文字和箭头
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()

x = np.linspace(0, 20, 1000)
ax.plot(x, np.cos(x))
ax.axis('equal')

ax.annotate("max", xy=(6.28, 1), xytext=(10, 4), arrowprops=dict(facecolor='black', shrink=0.05))
ax.annotate('min', xy=(5 * np.pi, -1), xytext=(2, -6), arrowprops=dict(arrowstyle="->", connectionstyle='angle3, angleA=0, angleB=-90'))
plt.show()

python数据分析工具之 matplotlib详解

python数据分析工具之 matplotlib详解

三维图

基础三维图

matplotlib 中绘制三维图用到 mplot3d 包。导入 mplot3d 包后,可以利用 projection 参数,控制绘制三维图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

plt.show()

python数据分析工具之 matplotlib详解

三维图中当然包含三个轴,x,y,z。画线 ax.plot3D,画点 ax.scatter3D。为了三维效果,它会自动将远处的点颜色变浅。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

z = np.linspace(0, 15, 100)
x = np.sin(z)
y = np.cos(z)

ax.plot3D(x, y, z, 'red')
ax.scatter3D(x, y, z, 'blue')
plt.show()

三维等高线

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure()
ax = plt.axes(projection='3d')

def f(x, y):
 return np.sin(np.sqrt(x ** 2 + y ** 2))

x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y =np.meshgrid(x, y)
Z = f(X, Y)

ax.contour3D(X, Y, Z, 50)
plt.show()

python数据分析工具之 matplotlib详解

图形绘制出来后,可以通过 ax.view_init 来控制观察的角度,便于理解。

  • 俯仰角度:x-y 平面的旋转角度
  • 方位角度:沿着 z 轴顺时针旋转角度

pandas绘图

上篇文章讲述了 pandas 的基本用法,pandas 是数据分析中最重要的工具之一,这里补充一下 pandas 绘图。

Series绘图

# 这是一个小栗子
s1 = Series(np.random.randint(1000).cumsum()) # 创建series,cumsum()是指叠加求和,本位数是前几项之和
s1.plot() # series有自己的plot函数,里面可以写入想要的参数

DataFrame绘图

df = DataFrame(
 np.random.randint(1,10,40).reshape(10,4),
 columns=['A','B','C','D']
 )
df.plot()
# dataframe也有自己的plot,按列画出来,参数包含ax,选择输出的画布
# 参数:stacked=True,表示一个堆叠的情况,同一个index下,columns一不同颜色叠在一起

总结

到此这篇关于python数据分析工具之 matplotlib详解的文章就介绍到这了,更多相关python数据分析 matplotlib内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python回调函数的使用方法
Jan 23 Python
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
python处理PHP数组文本文件实例
Sep 18 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python3.7.0的安装步骤
Aug 27 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
pymongo中group by的操作方法教程
Mar 22 Python
python dlib人脸识别代码实例
Apr 04 Python
python3.4中清屏的处理方法
Jul 06 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
使用python检查yaml配置文件是否符合要求
Apr 09 #Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
python实现简单学生信息管理系统
Apr 09 #Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 #Python
pycharm的python_stubs问题
Apr 08 #Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 #Python
解决pycharm下pyuic工具使用的问题
Apr 08 #Python
You might like
用PHP读取IMAP邮件
2006/10/09 PHP
php实现smarty模板无限极分类的方法
2015/12/07 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
在JavaScript中重写jQuery对象的方法实例教程
2014/08/25 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
jQuery实现简单的手风琴效果
2020/04/17 jQuery
AngularJS表单验证功能
2017/10/19 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
学习jQuery中的noConflict()用法
2018/09/28 jQuery
微信小程序云开发实现增删改查功能
2019/05/17 Javascript
微信小程序服务器日期格式化问题
2020/01/07 Javascript
详解Python进程间通信之命名管道
2017/08/28 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
python+pygame实现坦克大战
2019/09/10 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
Java软件工程师综合面试题笔试题
2013/09/08 面试题
工业设计专业个人求职信范文
2013/12/28 职场文书
个人欠款担保书
2014/05/20 职场文书
承诺书格式
2014/06/03 职场文书
住房租房协议书
2014/08/20 职场文书
励志演讲稿200字
2014/08/21 职场文书
先进班集体事迹材料
2014/12/25 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
2015年全国保险公众宣传日活动方案
2015/05/06 职场文书
返乡农民工证明
2015/06/24 职场文书
导游词之西安骊山
2019/12/03 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server