【DataWhale】Matplotlib入门——Task 2

引言

Matplotlib 是 Python 中较为常用和知名的可视化绘图工具。它提供了几十种绘图函数。用户可以根据需求定制可视化视觉样式和排版布局。

1、图形元素


在这里插入图片描述

2、图层顺序

在同一个坐标图形中绘制不同的数据图层时,Matplotlib 可通过设置每个绘图函数中的 zorder 参数来设定不同的图层。不同的艺术对象在坐标图形中的默认图层顺序如表 2-1-1 所示。
在这里插入图片描述
在这里插入图片描述
修改绘图函数中 zorder 参数值后绘制的可视化示例,如下图所示。
在这里插入图片描述
代码如下(示例):

import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt

from proplot import rc
rc["font.family"] = "Times New Roman"
rc['tick.labelsize'] = 12
rc["suptitle.size"] = 15

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

# 创建12列的子图分布
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.5),facecolor="w",sharey=True)
ax1.plot(x, y, 'C3', lw=4)
ax1.scatter(x, y, s=180,color="#FFCC37",ec="k",label="zorder=2")
ax1.set_title('Lines on top of dots',fontsize=15)
ax1.legend()
ax2.plot(x, y, 'C3', lw=4)
ax2.scatter(x, y, s=180, color="#FFCC37",ec="k",zorder=3,label="zorder=3")  # move dots on top of line
ax2.set_title('Dots on top of lines',fontsize=15)
ax2.legend()

plt.tight_layout()

plt.show()

3.轴比例和刻度

3.1轴比例

轴比例规定了数值与给定轴之间的映射方式,即数值在轴上以何种方式进行缩放。Matplotlib 中的默认轴比例方式为线性(linear)方式,其他诸如 log、logit、symlog 和自定义函数比例方式也是常用的轴比例方式。如下图所示,为不同轴比例的可视化对比。
在这里插入图片描述
代码示例:

import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt
from matplotlib.ticker import NullFormatter, FixedLocator

from proplot import rc

rc["font.family"] = "Times New Roman"
rc['tick.labelsize'] = 12
rc["suptitle.size"] = 15

np.random.seed(19680801)
# make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

# plot with various axes scales
fig, axs = plt.subplots(2, 2, figsize=(6, 4.5),
                        constrained_layout=True)
# linear
ax = axs[0, 0]
ax.plot(x, y, color="#2FBE8F", lw=3)
ax.set_yscale('linear')
ax.set_title('linear')
ax.grid(True)
# log
ax = axs[0, 1]
ax.plot(x, y, color="#2FBE8F", lw=3)
ax.set_yscale('log')
ax.set_title('log')
ax.grid(True)
# symmetric log
ax = axs[1, 1]
ax.plot(x, y - y.mean(), color="#2FBE8F", lw=3)
ax.set_yscale('symlog', linthresh=0.02)
ax.set_title('symlog')
ax.grid(True)
# logit
ax = axs[1, 0]
ax.plot(x, y, color="#2FBE8F", lw=3)
ax.set_yscale('logit')
ax.set_title('logit')
ax.grid(True)

plt.tight_layout()

plt.show()

3.2刻度位置和刻度格式

刻度位置和刻度格式分别规定了每个轴对象上刻度的位置与格式
在这里插入图片描述
在这里插入图片描述

4、坐标系

常见的坐标系有直角坐标系、极坐标系和地理坐标系,其中直角坐标系和地理坐标系在科研论文绘图中出现的频率较高。
在这里插入图片描述

4.1直角坐标系

直角坐标系又称笛卡儿坐标系,如果在二维直角坐标系中添加一个Z 轴,则该坐标系转变为三维直角坐标系(也称为笛卡儿空间坐标系)
在这里插入图片描述

4.2极坐标系

极坐标系是一种在平面内由极点(pole)、极轴(polar axis)和极径组成的坐标系统。极坐标系往往体现数据的周期性,即它可以更好地展示数据的周期性变化,这就要求数据较为完整且有明显的周期性特征。而对于常见的科研论文配图,由于数据本身的问题,因此导致很少使用极坐标系绘制它们(地理空间类图表除外)。

4.3地理坐标系

Matplotlib 地理坐标系中的地理投影方式较少,仅有 Aitoff 投影、Hammer 投影、Lambert投影和 Mollweide 投影 4 种。Matplotlib 不适合绘制地理图表,可使用 Python 的第三方库(如 cartopy、ProPlot 等库)绘制地理图表。

5.多子图绘制

Matplotlib 中提供了多个用来绘制多子图的函数。

1.subplot():对当前画布对象添加单个子图,且每次添加子图都会规定其位置顺序。

代码示例如下:

import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt

from proplot import rc
rc["font.family"] = "Times New Roman"
rc["axes.labelsize"] = 15
rc['tick.labelsize'] = 13
rc["suptitle.size"] = 15


plt.figure(figsize=(6,3),dpi=100,facecolor="w")
ax1 = plt.subplot(212)
ax1.text(0.5, 0.5, "subplot(212)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
ax2 = plt.subplot(221)
ax2.text(0.5, 0.5, "subplot(221)", alpha=0.75, ha="center", va="center", weight="bold", size=12)
ax3 = plt.subplot(222)
ax3.text(0.5, 0.5, "subplot(222)", alpha=0.75, ha="center", va="center", weight="bold", size=12)

plt.tight_layout()    
plt.show()

在这里插入图片描述

2.add_subplot():使用方法和 subplot() 函数类似,不同之处是,它先产生 figure 对象,然后在该对象的基础上依次添加子图。

代码示例:
在这里插入图片描述

3.subplots():语法格式如下
subplots(nrows, ncols, sharex, sharey)

nrows表示绘制子图的行数;
ncols表示绘制子图的列数,行数与列数的乘积即绘制的总子图数;
sharex 可以用来设定是否共享 X 轴;
sharey 可以用来设定是否共享 Y 轴。
该函数会返回一个坐标数组对象,该对象用于每个子图的单独绘制。
代码示例:

在这里插入图片描述
在这里插入图片描述

4.axes():为当前画布 (figure) 对象添加坐标图形 (axes) 对象,使其成为当前的坐标图形(axes)对象。

代码示例:

import pandas as pd
import numpy as np
import proplot as pplt
# from colormaps import parula  #自定义的颜色系
import matplotlib.pyplot as plt

from proplot import rc
rc["font.family"] = "Times New Roman"
rc["axes.labelsize"] = 15
rc['tick.labelsize'] = 13
rc["suptitle.size"] = 15

# Fixing random state for reproducibility
np.random.seed(19680801)
#plt.figure(figsize=(6,4))
plt.subplot(211)
plt.imshow(np.random.random((100, 100)))
plt.subplot(212)
plt.imshow(np.random.random((100, 100)))

plt.subplots_adjust(bottom=0.1, right=0.8, top=0.9)
cax = plt.axes([0.85, 0.1, 0.075, 0.8]) # rect 参数(一个四元组:left、 bottom、width、height)
plt.colorbar(cax=cax)

plt.show()

在这里插入图片描述

5.subplot2grid():实现对不规则多子图的绘制,即在当前画布对象上绘制网格(grid),网格可用于在特定位置绘制布局和大小不同的子图对象。
语法:subplot2grid(shape, location, rowspan/colspan)
shape 规定了的网格的行数和列数;
location 决定了子图在网格内的行号和列号;
rowspan 或 colspan,它们分别规定了每个子图向下跨越的行数和向右跨越的列数。

代码示例:
在这里插入图片描述
在这里插入图片描述

6.gridspec.GridSpec():数用于指定放置子图的网格的几何形状。
语法:gridspec.GridSpec(nrows, ncols, figure, left, bottom, right, top)
nrows 表示网格中的行数;
ncols 表示网格中的列数;
left、bottom、right和 top 是可选参数,用于将子图的范围定义为图形宽度或高度的一部分。

代码示例:
在这里插入图片描述
在这里插入图片描述

7.subplot_mosaic():可利用 mosaic 参数设置特定字符串符号(重复次数、顺序等)来进行子图的视觉布局。
语法:subplot_mosaic(mosaic,…)

代码示例:
在这里插入图片描述
在这里插入图片描述

6.常见的图类型

包括误差图、散点图、柱形图、饼图、直方图和箱线图等。
在这里插入图片描述
在这里插入图片描述

7.图的保存

Matplotlib 绘制的图对象可以保存为多种格式,如 PNG、JPG、TIFF、PDF 和 SVG 等。

注意!!!:结果保存函数 savefig() 必须出现在 show() 函数之前,可避免保存结果为空白等问题。

设置参数 bbox_inches=‘tight’,去除图表周围的空白部分。
代码示例:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值