如何在 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

# Create data
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)"))

# Add traces
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)

# Assign unique titles to each subplot
fig.update_layout(title_text="Trigonometric Functions")
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)

# Display the plot
fig.show()
  • 首先导入 plotly.graph_objs 和 plotly.subplots,因为这些是必需的库。为了创建一些示例数据,我们还导入了 numpy 库。

  • 然后使用 numpy 库创建一些示例数据。我们生成的三个数组 y1、y2 和 y3 分别表示数组 x 的 sin、cos 和 tan 函数。接下来,使用 make_subplots() 方法创建一个具有一个行和三个列的子图网格。

  • 此外,将 subplot_titles 选项传递给一个包含三个字符串的数组,其值为“Sin(x)”、“Cos(x)”和“Tan(x)”。这将确定每个网格子图的标题。

  • 创建子图网格后,使用 add_trace() 函数为每个子图提供一个轨迹。为三个 y1、y2 和 y3 数组中的每一个添加一个 Scatter 轨迹。对于三个轨迹,我们还分别提供 name 参数作为“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() 函数提供了一种实用的方法来制作子图网格。通过使用 subplot_titles 参数,网格中的每个子图都可以具有不同的标题。除此之外,update xaxes() 和 update yaxes() 例程允许我们更改每个子图的 x 轴和 y 轴的名称。

更新于: 2023 年 3 月 24 日

4K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告