Python数据可视化matplotlib:第一回 Matplotlib 初相识

  • 组队学习目标

    本次参与组队学习的主要目标就是希望自己能够通过本次学习能够熟悉掌握matplotlib的基本用法,而不是当我学习需要的时候即查即用。这样虽然自己可以正常使用,但是总感觉会又不会的样子。在学习过程中,我觉得学习任何一门语言,或者对应库的时候,最标准的解释就是其官方文档的解释,但是由于大部分官方文档内容晦涩难懂,对于一些初学的或者没有什么耐心看下去的同学们都很难继续阅读下去,所以关于课程创始人们通过精读官方文档来完成的这们课程的学习很适合初学者们观看学习。

MatplotLib初相识

1. matplotlib中入门的一个最简单的例子:

```python
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 200)
y = np.sin(x)

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
```

在这里插入图片描述

这其实就是绘制了一个简单的正弦函数的一个周期图像,由于我并不是初学者,所以这部分内容对我比较简单,但是这次我着重关注了plt.subplots() 这个方法,因为每次用到的时候我只是简单的用到,因此我到官方文档查看一些这个函数的一些重要参数介绍和返回值的介绍。
该方法用于创建一个图形和一组子图。其主要参数如下:
nrows,ncols: 整型,可选参数,默认为1。表示子图网格(grid)的行数与列数。
sharex,sharey: 布尔值或者{‘none’,‘all’,‘row’,‘col’},默认:False

				控制x(sharex)或y(sharey)轴之间的属性共享:
	             1. True或者'all':x或y轴属性将在所有子图(subplots)中共享.
	             2. False或'none':每个子图的x或y轴都是独立的部分
	             3. 'row':每个子图在一个x或y轴共享行(row)
	             4. 'col':每个子图在一个x或y轴共享列(column)
	         当子图在x轴有一个共享列时('col'),只有底部子图的x tick标记是可视的。
	         同理,当子图在y轴有一个共享行时('row'),只有第一列子图的y tick标记是可视的。

squeeze: 布尔类型,可选参数,默认:True。

	  			1. 如果是True,额外的维度从返回的Axes(轴)对象中挤出。
	            2. 如果只有一个子图被构建(nrows=ncols=1),结果是单个Axes对象作为标量被返回。
	         	3. 对于N*1或1*N个子图,返回一个1维数组。
			 	4. 对于N*M,N>1和M>1返回一个2维数组。

	            5. 如果是False,不进行挤压操作:返回一个元素为Axes实例的2维数组,即使它最终是1x1。

subplot_kw: 字典类型,可选参数。把字典的关键字传递给add_subplot()来创建每个子图。

gridspec_kw: 字典类型,可选参数。把字典的关键字传递给GridSpec构造函数创建子图放在网格里(grid)。
fig_kw: 把所有详细的关键字参数传给figure()函数

返回结果:
fig: matplotlib.figure.Figure对象
ax: Axes(轴)对象或Axes(轴)对象数组。
在这里插入图片描述

2. matplotlib中的Figure对象组成

一个完整的matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container)。

  • Figure:顶层级,用来容纳所有绘图元素

  • Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成

  • Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素

  • Tick:axis的下属层级,用来处理所有和刻度有关的元素

除了这部分最主要的内容之外,还有许多可以丰富可视化图形的一些元素,其中包括有图例legend(),图形的题目title(),xlabel(),ylabei()等许多内容。 绘制不同图形的方法,大致有折线图,柱状图,饼图,由于我主要学习方向是数据分析方向,所以用的比较多的还有相关性分析的图形,还有箱线图等。正是因为有如此种类繁多的内容,导致部分人使用的时候只想即查即用,因为这样他们也可以使用matplotlib绘制出自己想要的图像,但又不需要自己记住这么多知识。但其实这部分内容里面有大部分重复的内容不需要额外记忆,大致的一些图形格式设计都是重复的,并不需要多长时间的记忆,只需要多多使用练习就可以记得住大部分内容。

3. 两种绘图接口

matplotlib提供了两种最常用的绘图接口

1. 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
2. 依赖pyplot自动创建figure和axes,并绘图

在我平常的学习使用中其实大多数使用的是第二种方法,用的比较少的是第一种方法。
一般在绘制子图的时候才会使用到第一种方法

#把画布分为三行五列,并设置figure标题
fig,axs=plt.subplots(2,2,figsize=(15,15),sharex=True,sharey=False)
#选中第二行第二个画出散点图
axs[1][1].scatter(np.random.randn(10),np.random.randn(10))
axs[1][1].set_title('scatter')
axs[1][1].set_xlabel('x label')
axs[1][1].set_ylabel('y label')
axs[1][1].set_xlim(-5,8)

for i in range(2):
    for j in range(1):
            axs[i][j].plot([2,4,8],range(3))

plt.show()

在这里插入图片描述

上图采用第二种绘制方法如下:

plt.subplots(2,2,figsize=(15,15),sharex=True,sharey=False)
# 绘制第一幅子图
plt.subplot(221)
plt.plot([2,4,8],range(3))

# 绘制第三幅子图
plt.subplot(223)
plt.plot([2,4,8],range(3))

# 绘制第四幅子图
plt.subplot(224)
plt.scatter(np.random.randn(10),np.random.randn(10))
plt.title('scatter')
plt.xlabel('x label')
plt.ylabel('y label')
plt.xlim(-5,8)

plt.show()

在这里插入图片描述

4. 思考题

  1. 第一种绘制模式是一种面向对象的绘图方式。多用于非交互式绘图中。当使用这种方式绘图时,你可以清晰的了解到matplotlib中有哪些对象,适合有一定可视化基础的人提升使用。

  2. 第二中绘制模式依据Pyplot模块实现类似matlab绘图指令的绘图方式多用于交互式绘图当中。例如jupyter notebook或jupyter lab 中。这种绘图比较简单,你想要绘制什么样的图形就去找对应的绘制方法,适用于初学者刚刚入门接触数据可视化部分。

# step1 准备数据
x = np.linspace(0, 2, 100)
y = x**2

# step2 设置绘图样式,这一模块的扩展参考第五章进一步学习,这一步不是必须的,样式也可以在绘制图像是进行设置
mpl.rc('lines', linewidth=4, linestyle='-.')

# step3 定义布局, 这一模块的扩展参考第三章进一步学习
plt.subplots()  

# step4 绘制图像, 这一模块的扩展参考第二章进一步学习
plt.plot(x, y, label='linear')  

# step5 添加标签,文字和图例,这一模块的扩展参考第四章进一步学习
plt.xlabel('x label') 
plt.ylabel('y label') 
plt.title("Simple Plot")  
plt.legend() 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值