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()
函数,常用 rows
和 cols
参数设置子图有几行几列,subplot_titles
参数设置子图的名字,用列表传入。
例:创建包含两个子图的图表,该图一行两列,第一个子图为散点图,第二个子图为折线图,分别命名为 Subplot 1 和 Subplot 2。
这里先创建好 trace,再传入 .add_trace()
,并用 row
和 column
参数设置子图位置。
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_title
和 yaxis_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()
设置图片大小#
可以使用 height
和 width
参数来指定图形的高度和宽度。
例:修改上面 Figure
的高度和宽度。
fig.update_layout(
height=400, # 设置图形高度
width=600 # 设置图形宽度
)
fig.show()