如何使用 Python 中的 Plotly 为每个不同的子图应用不同的标题?
简介
子图创建是 Python 库 Plotly 提供的几种数据可视化工具之一。可以使用子图将大叙事分解为多个较小的叙事。有时,为了使主要故事更具深度和一致性,为每个子图赋予自己的标题可能是必不可少的。
语法
通过使用 subplot_titles 参数,可以在绘图网格中自定义子图标题,这使我们能够为每个绘图创建唯一的标题。make_subplots() 函数本质上是一种工厂方法,它允许我们建立具有指定行数和列数的绘图网格。让我们深入研究一下可以使用 make_subplots() 操作的一些关键参数 -
rows - 此参数指定绘图网格中的行数。
cols - 此参数指定绘图网格中的列数。
specs - 描述网格中每个子图类型的数组数组。specs 数组中的每个元素应包含两个值:子图分别跨越的行数和列数,以及子图类型。
subplot_titles - 说明网格中每个子图标题的字符串数组。此数组的大小应等于网格中的子图数量。
在下面的代码中,我们将以这样的方式为每个子图赋予一个唯一的标题 -
fig = make_subplots(rows=1, cols=3, subplot_titles=("Subplot 1", "Subplot 2", "Subplot 3"))
示例
在编写实际代码之前,请先了解其算法。
导入必要的模块 - plotly.graph_objs 和 plotly.subplots 以及 numpy。
使用 numpy 创建一些要绘制的数据。
使用 make_subplots 函数创建一个具有 1 行和 3 个元素的子图网格列。传递 subplot_titles 参数为每个子图赋予唯一标题。
使用 add_trace 方法向每个子图添加轨迹。对于每个子图,传递一个包含要绘制的数据的 go.Scatter 对象和一个用于标记数据的 name 参数。
使用 update_layout 方法为整个图分配标题。
使用 update_xaxes 和 update_yaxes 方法为每个子图的 x 轴和 y 轴分配唯一标题。
使用 show 方法显示图。
import plotly.graph_objs as go from plotly.subplots import make_subplots import numpy as np # 创建数据 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.tan(x) # Create subplots fig = make_subplots(rows=1, cols=3, subplot_titles=("Sin(x)", "Cos(x)", "Tan(x)")) # 添加轨迹 fig.add_trace(go.Scatter(x=x, y=y1, name='Sin(x)'), row=1, col=1) fig.add_trace(go.Scatter(x=x, y=y2, name='Cos(x)'), row=1, col=2) fig.add_trace(go.Scatter(x=x, y=y3, name='Tan(x)'), row=1, col=3) # 为每个子图分配唯一标题 fig.update_layout(title_text="三角函数") fig.update_xaxes(title_text="X-axis for Sin Wave", row=1, col=1) fig.update_xaxes(title_text="X-axis for Cos Wave", row=1, col=2) fig.update_xaxes(title_text="X-axis Tan Wave", row=1, col=3) fig.update_yaxes(title_text="Y-axis for Sin Wave", row=1, col=1) fig.update_yaxes(title_text="Y-axis for Cos Wave", row=1, col=2) fig.update_yaxes(title_text="Y-axis Tan Wave", row=1, col=3) # 显示绘图 fig.show()

首先导入 plotly.graph objs 和 plotly.subplots,因为这些是必需的库。为了创建一些示例数据,我们还导入了 numpy 库。
然后使用 numpy 库创建一些示例数据。数组 x 的 sin、cos 和 tan 函数由我们生成的三个数组 y1、y2 和 y3 表示。使用 make subplots() 方法,我们接下来生成一个具有一行和三列的子图网格。
子图标题选项还发送了一个包含三个字符串的数组,其值分别为"Sin(x)"、"Cos(x)"和"Tan(x)"。每个网格子图的标题都由此确定。
使用 add trace() 函数,在创建子图网格后,每个子图都会获得一条迹线。对于三个 y1、y2 和 y3 数组中的每一个,都会添加一条散点迹线。对于这三条迹线,我们还相应地提供了名称参数"Sin(x)"、"Cos(x)"和"Tan(x)"。通过利用 add trace() 方法的 row 和 col 参数,我们可以定义每个轨迹的子图。
然后使用 update layout() 方法将图的一般标题更改为"三角函数"。
现在使用 update xaxes() 和 update yaxes() 方法为每个子图设置 x 轴和 y 轴标题,为每个子图赋予一个特殊标题。为了指示我们想要更新的子图,我们提供 row 和 col 参数。我们还传递了 title text 参数来设置 x 轴或 y 轴的标题。
最后使用 show() 方法显示图。
结论
Plotly 的 make subplots() 函数提供了一种制作子图网格的实用方法。通过使用子图标题参数,网格中的每个子图都可以具有不同的标题。除此之外,更新 xaxes() 和更新 yaxes() 例程允许我们更改每个子图的 x 轴和 y 轴的名称。