Python 如何使用Plotly为每个子图应用不同的标题
介绍
Python库Plotly提供了多种数据可视化工具之一的子图创建功能。可以使用子图将一个大的叙事分解为多个较小的部分。有时,为了给主要故事增加深度和一致性,为每个子图提供自己的标题是必不可少的。
语法
通过使用subplot_titles参数,我们可以为每个绘图创建独特的标题,从而实现自定义subplot标题在绘图网格中的样式。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库创建一些示例数据。数组x的sin、cos和tan函数由我们生成的三个数组y1、y2和y3表示。使用make_subplots()方法,我们接下来生成一个由一行和三列组成的子图网格。
-
子图标题选项还接收一个由三个字符串值“Sin(x)”,“Cos(x)”和“Tan(x)”组成的数组。每个子图的标题由此确定。
-
使用add_trace()函数,在创建子图网格后为每个子图指定一个trace。对于y1、y2和y3数组的每一个,都添加一个Scatter trace。在这三个trace中,我们还分别提供name参数为“Sin(x)”,“Cos(x)”和“Tan(x)”。通过利用add_trace()方法的row和col参数,我们可以为每个trace定义子图。
-
然后使用update_layout()方法将整个图的标题更改为“三角函数”。
-
现在使用update_xaxes()和update_yaxes()方法为每个子图设置x轴和y轴标题,以给每个子图一个特殊的标题。为了指示我们希望更新的子图,我们提供row和col参数。我们还通过传递title_text参数来设置x轴或y轴的标题文本。
-
最后使用show()方法显示图。
结论
Plotly的make_subplots()函数提供了一种实用的方法来创建子图网格。通过使用子图标题参数,网格中的每个子图可以有不同的标题。除此之外,update_xaxes()和update_yaxes()方法允许我们为每个子图更改x轴和y轴的名称。