如果你觉得内容对你有帮助,请在 GitHub 上点个 star 吧!

4.2. Plotly 画图元素#

import plotly.graph_objects as go

import plotly.io as pio
pio.renderers.default = "notebook"

Plotly 提供了丰富的画图元素,使得用户能够创建各种交互性图形。本节对 Plotly 中常用的画图元素进行详细说明。

图形 Figure#

与 Matplotlib 类似, Plotly 中的 Figure 对象是整个图表的容器,包含了 trace 和图形样式 Layout。trace 是一个比较抽象的概念,可以理解成图形 + 数据,比如散点图(plotly.graph_objects.Scatter)是一个 trace,它是一种类型的图形(散点图),并包含了绘制散点图的数据。

一般的步骤为:先创建 Figure 并在其中添加多个 trace,然后修改 Layout 来调整外观;也可以在一个 Figure 对象中创建多个子图,再分别添加对应的 trace。

子图#

章节 4.1,我们已经介绍了如何创建一张图表,这里主要展示如何创建多个子图。我们用 plotly.subplots 模块中的 .make_subplots() 方法来创建多个子图,可类比于 Matplotlib 中的 subplots() 函数,常用 rowscols 参数设置子图有几行几列,subplot_titles 参数设置子图的名字,用列表传入。

例:创建包含两个子图的图表,该图一行两列,第一个子图为散点图,第二个子图为折线图,分别命名为 Subplot 1 和 Subplot 2。

这里先创建好 trace,再传入 .add_trace(),并用 rowcolumn 参数设置子图位置。

import plotly.subplots as sp

# 创建包含两个子图的图表
fig = sp.make_subplots(rows=1, cols=2, subplot_titles=['Subplot 1', 'Subplot 2'])

# 子图1 - 散点图
scatter_trace = go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode='markers')
fig.add_trace(scatter_trace, row=1, col=1)

# 子图2 - 折线图
line_trace = go.Scatter(x=[1, 2, 3, 4], y=[5, 4, 3, 2], mode='lines')
fig.add_trace(line_trace, row=1, col=2)

# 更新布局信息
fig.update_layout(title='Multiple Subplots')

# 显示图表
fig.show()

trace#

Plotly 提供了几大类 trace,比如最常见的散点图、饼图;面向金融领域的 OHLC;平面或者三维地图等。章节 4.3 将介绍常见的简单图表;章节 4.4 将介绍金融相关的图表。

布局 Layout#

Layout 是图形的外观和样式的控制元素, Layout 对象包含在 Figure 对象中,通常通过设置 .update_layout() 方法来调整图形的布局,一张图可以多次调整,即可以多次使用该函数。常见的具体设置如下。

修改标题#

使用 title 参数设置新标题。

例:将上面的 Figure 的标题改为 Subplots,并居中显示。

Note

Plotly 中,图片标题不会默认居中,需要设置 title_x=0.5 来调整。

fig.update_layout(title='Subplots', title_x=0.5)
fig.show()

设置图例#

使用 .update_layout() 方法的 showlegend 参数,设置为 True 则显示图例, False 则不显示,默认为True。在一个图上有多条轨迹 trace 时可以更清楚地反映数据。

例:将上面的 Figure 默认的图例删除。

fig.update_layout(showlegend=False)
fig.show()

设置轴标题#

xaxis_titleyaxis_title 参数分别用于设置 X 轴和 Y 轴的标题;也可以使用 .update_xaxes().update_yaxes() 方法,传入 title_text 参数设置标题。

下面的例子使用 update_layout() 方法来设置整体布局的属性,而使用 .update_xaxes().update_yaxes() 方法来设置每个子图的轴标题。

# 设置子图1的轴标题
fig.update_xaxes(title_text='X1轴标题', row=1, col=1)
fig.update_yaxes(title_text='Y1轴标题', row=1, col=1)

# 设置子图2的轴标题
fig.update_xaxes(title_text='X2轴标题', row=1, col=2)
fig.update_yaxes(title_text='Y2轴标题', row=1, col=2)

# 显示图形
fig.show()

设置模版 template#

template 参数用于设置图形布局的模板,这可以应用特定的风格和主题。常用的参数选择有:

  • “plotly” (默认): 默认模板,采用 Plotly 经典的白色背景和颜色样式。

  • “plotly_dark”: 深色主题的模板,适合在暗色环境中查看。

  • “ggplot2”: 类似于 R 语言中的 ggplot2 图形系统的模板,采用灰色背景。

  • “seaborn”: 模拟 Python seaborn 的外观,具有淡蓝色的背景和灰色网格线。

  • “simple_white”: 简单的白色背景,适用于注重简洁性的图形。

  • “plotly_white”: 与 “plotly” 模板类似,采用白色背景,但可能有轻微差异。

例:对上面的 Figure 使用深色主题。

fig.update_layout(template='ggplot2')
fig.show()

设置图片大小#

可以使用 heightwidth 参数来指定图形的高度和宽度。

例:修改上面 Figure 的高度和宽度。

fig.update_layout(
    height=400,  # 设置图形高度
    width=600    # 设置图形宽度
)
fig.show()