Python可视化:图的构成

基本构成

一幅图的基本构成部分包括以下几个部分:

  • 图片对象 (figure):整个绘图区域的边界框,可以包含一个或多个子图。
  • 子图对象 (axes):实际绘图区域,包含若干坐标轴、绘制的图像和文本标签等。
  • 坐标轴 (axis):显示子图数据范围并提供刻度标记和标签的对象。
  • 图脊 (spine):连接坐标轴和图像区域的线条,通常包括上下左右四条。
  • 标题 (title):描述整个图像内容的文本标签,通常位于图像的中心位置或上方,用于简要概括
    图像的主题或内容。
  • 刻度 (tick):刻度标记,表示坐标轴上的数据值。
  • 标签 (label):用于描述坐标轴或图像的文本标签。
  • 图例 (legend):标识不同数据系列的图例,通常用于区分不同数据系列或数据类型。
  • 艺术家 (artist):在 Matplotlib 中,所有绘图元素都被视为艺术家对象,包括图像区域、子图区域、坐标轴、刻度、标签、图例等等。

Python 拥有多种用于数据可视化的工具。以下是一些常用的可视化工具:

  • Matplotlib 是 Python 中最流行的绘图库之一,提供了广泛的绘图功能,包括折线图、散点图、柱状图、饼图等。它具有灵活性和广泛的定制选项,可以用于创建静态、交互式和动态的图形。
  • Seaborn 建立在 Matplotlib 之上的高级统计数据可视化库。Seaborn 提供了一组美观且具有统计意义的图表样式和绘图功能,使得数据的可视化变得更加简单和直观。
  • Plotly 是一个交互式的可视化库,支持多种图表类型,包括线图、散点图、柱状图、热力图等。
    Plotly 提供了丰富的交互功能,可以在网页中创建动态和可交互的图形。

布局

图形对象(figure)

大小

可以使用 figure 函数,并指定figsize 参数来设置图像的宽度和高度。figsize 参数接受一个元组 (宽度, 高度),单位为英寸。

分辨率

默认图片以一个 dpi (dots per inch,每英寸点数) 为 100 的分辨率显示。利用

import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 300 #将图像 dpi 提高到 300。

如果想保存图像到文件,可以使用 savefig 函数,并通过设置 dpi 参数来指定分辨率。例如,如
果希望保存图像为 300dpi 的高质量 PNG 文件,可以用

plt.savefig('plot_name.png', dpi=300)

对于 Seaborn,

import seaborn as sns 
sns.set(rc={"figure.dpi":300, 'savefig.dpi':300}) #修改图片分辨率。

当然,如果情况允许尽量导出矢量图,比如 SVG 格式。

边距

一张图少不了上下左右留白,这个留白就是边距 (margin)。
在 Matplotlib 默认情况下,图像周围边距为:

► figure.subplot.left: 0.125
► figure.subplot.right: 0.9
► figure.subplot.top: 0.88
► figure.subplot.bottom: 0.11

子图(axes)

Figure 中可以有不止一幅子图。
子图是指将整个图形区域划分为多个小的绘图区域,每个区域可以用于绘制不同的图形。

比较 plt.plot() 和 ax.plot()

简单来说,plt.plot() 相当于“提笔就画”。
ax.plot() 基于一个 Axes 对象来绘制图形,Axes 对象是一个图形窗口中的一个独立坐标系。使用面向对象接口时,需要显式地创建一个 Figure 对象和一个或多个 Axes 对象,并在指定的 Axes 对象上调用 plot() 方法进行绘图。
ax.plot() 适合更复杂的绘图需求,并且具有更高的灵活性。

创建管理子图

add_subplot() 和 subplot()

add_subplot() 和 subplot() 在功能上是相似的,都可以用于创建和管理图形中的子图。它们的主要区别在于使用方式和语法。

add_subplot()

add_subplot() 是 Figure 对象的方法,用于在特定的 Figure 上添加子图。

fig = plt.figure()
fig.add_subplot(nrows, ncols, index)# nrows 为子图的行数,ncols 为子图的列数,
# index 为当前子图的索引 (从 1 开始,先行后列顺序递增)。

因此,使用 add_subplot() 方法时,首先需要创建一个 Figure 对象,然后调用该方法来添加子图,并将子图对象存储在变量中以进行后续的操作。

subplot()

subplot()是 pyplot 模块的函数,用于在当前的图形中添加子图。
subplot() 语法为

plt.subplot(nrows, ncols, index)。

使用 subplot()函数时,不需要显式地创建 Figure 对象。可以直接调用 subplot()函数,并在同一个代码块中添加多个子图。

subplots()

在 Matplotlib 中,subplots 函数用于创建一个包含多个子图的图形布局,并返回一个包含子图对象的元组。

add_subplot() 和 subplot()是在一个figure基础上添加管理axes
subplots()是建立一个包含多个子图的figure

以下是使用 subplots 函数的基本步骤:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows, ncols)
# 其中 nrows和 ncols 是整数,分别表示子图行和列的数量。
# axes[i, j]表示在第 i 行和第 j 列的位置上的子图对象。
insert_axes & add_axes

insert_axes 和 add_axes 在指定位置插入特定宽高的子图。
位置、宽高这四个数值均为 0 和 1 之间的浮点数,代表百分比。insert_axes 是 Figure 对象的方法。
add_axes 是 Figure 对象或 Subplot 对象的方法,用于在指定的图形或子图中添加axes。

GridSpec

在 Matplotlib 中,GridSpec 是一个用于灵活地布局子图的工具。它允许在绘图区域中创建规则的网格,并指定每个子图的大小、位置和跨越的行列数。
在 Matplotlib 中,add_gridspec 函数可以用来创建复杂的图形布局。它允许你在图形中创建多个子图,并指定它们的位置和大小。
使用 add_gridspec 函数的基本步骤如下:

import matplotlib.pyplot as plt。
fig = plt.figure()。
gs = fig.add_gridspec(nrows, ncols)
# 其中 nrows 和ncols 是整数,分别表示行和列的数量。

main_ax = fig.add_subplot(grid[:-1, 1:])
y_hist = fig.add_subplot(grid[:-1, 0], xticklabels=[])
x_hist = fig.add_subplot(grid[-1, 1:], yticklabels=[])
# 最后可以使用 GridSpec 对象创建子图,gs[i, j]表示在第 i 行和第 j 列的位置创建一个子图。可以使用切片语法来指定多个位置。

装饰

在这里插入图片描述

艺术家(artist)

在 Matplotlib 中,艺术家 (artist) 是指图形的每个可见 (甚至没那么明显的) 元素,如图脊、图轴、坐标轴、标题、标签、图例、线条、网格、色块等等。
每个艺术家对象都有自己的默认属性和方法,用于控制其外观和行为。

图脊(spine)

在 Matplotlib 中,图脊 (spine) 是指图形中的边框线,用于界定图形的边界。
图脊由四条边框线组成:

上脊 (top spine)、下脊 (bottom spine)、左脊 (left spine)
和右脊 (right spine)。

这些脊线可以通过 Matplotlib 的 Axes.spines 属性进行访问和定制。

ax.spines['bottom'].set_color('r') 
#设置下脊颜色位红色(red)
ax.spines['bottom'].set_position(('axes',0.5)) 
# 设置下脊位置为中间,取值范围为 [0, 1], 0.5 代表中间
ax.spines['right'].set(alpha = 0.2)
# 设置右脊透明值为0.2
ax.spines['left'].set(edgecolor = 'r', 
linestyle = '--', linewidth = 1)
# 设置左脊颜色为红色,虚线,宽度为1

轴(axis)

在 Matplotlib 中,图轴 (axis) 是指图形中的坐标轴,用于表示数据的数值范围和刻度。图轴包括轴线 (axis line)、刻度 (tick)、轴标签 (axis label) 等艺术家
如果一个图片对象包含多个轴对象,则每个轴对象都有自己的艺术家。

ax.set_xlim(-15,15); ax.set_ylim(-1.5, 1.5); 
ax.set_xticks(np.linspace(-4*np.pi, 4*np.pi, 5))
ax.set_xticklabels([r'$-4\pi$',r'$-2\pi$',
 r'$0\pi$',r'$2\pi$', r'$4\pi$'])
ax.tick_params(axis = 'x', 
 direction = 'in', 
 color = 'b', 
 width = 1, 
 length = 10)

注释

一幅图的注释可以如下常见类型。

► 标题 (title),对应函数为 matplotlib.pyplot.title() 或 ax.set_title();
► 横轴标题 (x axis label),对应函数为 matplotlib.pyplot.xlabel() 或
ax.set_xlabel();
► 纵轴标题 (y axis label),对应函数为 matplotlib.pyplot.ylabel() 或
ax.set_ylabel();
► 图例 (legend),对应函数为 matplotlib.pyplot.legend();
► 文字 (text),对应函数为 matplotlib.pyplot.text();
► 注解 (annotation),对应函数为 matplotlib.pyplot.annotate()。

考虑时间成本、美观效果、可编辑性等因素,如果后期制作加入各种注释更为方便的话,不建议大家耗费精力通过编程方式在图片中添加注释。

视角

在 Matplotlib 中,ax.view_init(elev, azim, roll) 方法用于设
置三维坐标轴的视角,也叫相机照相位置。这个方法接受三个参数:elev、azim 和 roll,
它们分别表示仰角、方位角和滚动角。

► 仰角 (elevation):elev 参数定义了观察者与 xy 平面之间的夹角,也就是观察者与 xy 平面之间的旋转角度。当 elev 为正值时,观察者向上倾斜,负值则表示向下倾斜。
► 方位角 (azimuth):azim 参数定义了观察者绕 z 轴旋转的角度。它决定了观察者在 xy 平面上的位置。azim 的角度范围是 −180 到 180 度,其中正值表示逆时针旋转,负值表示顺时针旋转。
► 滚动角 (roll):roll 参数定义了绕观察者视线方向旋转的角度。它决定了观察者的头部倾斜程度。正值表示向右侧倾斜,负值表示向左侧倾斜。

风格

图像的风格指的是图表的整体外观和样式,包括配色方案、线条类型、图脊、图轴、线条宽度、字体、标记符号等等设计元素。
Matplotlib 提供了一系列的预定义风格,可以通过设置来改变图表的外观。以下是Matplotlib 中常用的一些图像风格类型:

► "default"是 Matplotlib 的默认风格,使用蓝色线条和绿色网格。
► "classic"是一种经典的 Matplotlib 风格,使用黑色线条和白色背景,类似于传统的
Matplotlib 版本。
► "ggplot"模仿了 R 语言中的 ggplot 库的外观,使用灰色网格和彩色线条。
► "fivethirtyeight"模仿了流行的数据新闻网站 FiveThirtyEight 的外观,使用红色和蓝色
线条,以及灰色网格。
► "dark_background"使用深色背景和亮色线条,适合用于暗色主题的环境。
► "seaborn"模仿了 Seaborn 库的外观,使用柔和的颜色和灰色网格。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值