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中的列表推导浅析
Apr 26 Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
Python爬虫:将headers请求头字符串转为字典的方法
Aug 21 Python
Python配置文件处理的方法教程
Aug 29 Python
python中如何使用insert函数
Jan 09 Python
python ETL工具 pyetl
Jun 07 Python
python如何设置静态变量
Sep 07 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 Python
python神经网络ResNet50模型
May 06 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中取得image按钮传递的name值
2006/10/09 PHP
如何使用PHP中的字符串函数
2006/11/24 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
javascript css styleFloat和cssFloat
2010/03/15 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
关于JavaScript 原型链的一点个人理解
2016/07/31 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
vue2.0 better-scroll 实现移动端滑动的示例代码
2018/01/25 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
js实现小星星游戏
2020/03/23 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
波兰补充商店:Muscle Power
2018/10/29 全球购物
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
Seavenger官网:潜水服、浮潜、靴子和袜子
2020/03/05 全球购物
团日活动总结书格式
2014/05/08 职场文书
安全目标责任书
2014/07/22 职场文书
六一儿童节标语
2014/10/08 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
琅琊山导游词
2015/02/05 职场文书
努力学习保证书
2015/02/26 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技