Logo
Section 1 / 8

标题和坐标轴

学习如何格式化 Plotly 图形中的标题和坐标轴。

导入

标题和坐标轴

学习如何格式化 Plotly 图形中的标题和坐标轴。

自定义标题和坐标轴

在本课程中,我们将使用 fig.update_layout() 方法来调整图表的视觉元素。我们可以自定义标题、x轴、y轴等。当面对客户要求和业务需求时,这种方法尤其强大。

我们将从一个客户流失数据集开始。

更新标题

若仅需调整标题文本,可直接将字符串传递给 fig.update_layout() 方法中的 title 关键字参数。同样的方法也适用于x轴和y轴,只需将字符串传递给 xaxis_title 和 yaxis_title 关键字参数即可。


在下面的图表中,我们绘制了一个箱线图,用于分析各国人群年龄的分布情况。因此,为该图表设置标题为 Ages by Country 是合适的。我们还将x轴标记为 Country,y轴标记为 Age。请仔细观察以下代码片段:

1fig.update_layout(title='Ages by Country', xaxis_title='Country', yaxis_title='Age')

完整实现如下:

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 创建箱线图,将国家放在x轴,年龄放在y轴 11trace = go.Box(x=churn['Geography'], y=churn['Age']) 12 13# 创建图形对象 14fig = go.Figure(data=[trace]) 15 16# 对布局进行微调 17fig.update_layout(title='Ages by Country', 18 xaxis_title='Country', 19 yaxis_title='Age') 20 21# 显示图形 22fig.show()

标题设置:深入详解

接下来我们将更详细地探讨如何对图表标题进行精细样式设置:

若希望对标题进行极致的样式控制,可以使用 plotly.graph_objects.layout 模块中的 Title 类(由于我们已导入 graph_objects 模块,也可写作 go.layout)。然后将该类实例作为 fig.update_layout() 的 title 关键字参数传入。此处以箱线图为例,但标题通常适用于所有类型的图表,因此此方法可用于任何适合可视化任务的图表。我们仍将x轴和y轴的设置保持简单,如前例所示。

在下图中,我们向 go.layout.Title() 传递了多种关键字参数,并将其存储在名为 title_settings 的变量中。这些参数包括:

  • text:标题文本。
  • font:一个字典,用于调整字体类型(family)、字号(size)以及颜色(我们使用十六进制颜色值以精确指定所需颜色)。
  • xref(来自 Plotly 文档):定义由变量 x 引用的容器。container 表示整个图表的宽度,而 paper 仅指绘图区域的宽度。
  • yref(来自 Plotly 文档):定义由变量 y 引用的容器。container 表示整个图表的高度,而 paper 仅指绘图区域的高度。

绘图区域 指的是显示数据的图表区域。它与边距不同,边距是围绕绘图区域的空白区域,通常用于放置x轴和y轴标签、刻度标记以及图例。


  • x:相对于 xref 参数确定x位置。取值范围为0到1,其中0表示最左侧位置,1表示最右侧位置。此处设为 x=0.5,结合 xanchor="auto" 可使标题居中。
  • y:相对于 yref 参数确定y位置。取值范围为0到1,其中0表示最底部位置,1表示最顶部位置。y 参数默认选项为 auto,表示将标题基线置于上边距的垂直中心。此处设为 y=0.95,结合 yanchor="auto",可使标题靠近页面顶部,避免遮挡箱线图内容。
  • xanchor:设为 "left" 表示标题从 x 值处开始;设为 "right" 表示标题在 x 值处结束;设为 "center" 表示标题中心位于 x 值处。我们也可以保留默认值 xanchor="auto",此时系统会将 xref 除以三,并根据 x 的值自动计算 xanchor 值(参考 Plotly 文档)。
  • yanchor:设为 "top" 表示标题的顶部线条位于 y 值处;设为 "bottom" 确保标题基线位于指定的 y 位置;设为 "middle" 则使标题中线位于 y 值处。同样,也可以保留默认值 yanchor="auto",系统会将 yref 除以三,并根据 y 的值自动计算 yanchor 值。

以上仅为部分可用选项,文档中还有更多设置可供选择。


以下是用于调整标题的具体设置:

1title_settings = go.layout.Title(text='Ages by Country', 2 font=dict(family="Arial", size=50, color="#cc66ff"), 3 xref="container", 4 yref="container", 5 x=0.5, 6 y=0.95, 7 xanchor="auto", 8 yanchor="auto")

利用这些设置生成图表如下:

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8churn = pd.read_csv("/usr/local/csvfiles/churn.csv") 9 10# 创建箱线图 11trace = go.Box(x=churn['Geography'], y=churn['Age']) 12 13# 创建 go.Figure() 对象 14fig = go.Figure(data=[trace]) 15 16# 修改标题设置 17title_settings = go.layout.Title(text='Ages by Country', 18 font=dict(family="Arial", size=50, color="#cc66ff"), 19 xref="container", 20 yref="container", 21 x=0.5, 22 y=0.95, 23 xanchor="auto", 24 yanchor="auto") 25 26fig.update_layout(title=title_settings, # 应用我们的设置 27 xaxis_title='Country', 28 yaxis_title='Age') 29 30# 显示图形 31fig.show()

坐标轴设置:深入详解

标题并非我们唯一能完全掌控的图表元素。实际上,我们可以根据可视化需求灵活调整x轴和y轴。在此示例中,我们将使用一份记录2018年各国家多种变量的数据集进行绘图。

自定义x轴和y轴

若要对坐标轴进行精细化设置,可以使用 plotly.graph_objects.layout 中的 XAxis 类(或写作 go.layout),同样适用于 YAxis 类。这两个类允许传入多个重要参数。一些关键参数如下:

  • title:为了最大程度自定义,可使用 go.layout.xaxis.Title 或 go.layout.yaxis.Title 类,并应用前述标题设置,如 text、font 等。

  • tickfont:一个字典,用于控制刻度标签的颜色、字体族和大小。

  • tickangle:设置角度值(单位为度)。此处设为 tickangle=-45,使刻度线倾斜。可尝试不同数值,或保留默认值 tickangle="auto"。

  • tickprefix:在每个刻度值前添加自定义字符串。默认为空字符串(无前缀)。

  • ticksuffix:在每个刻度值后添加自定义字符串。默认为空字符串(无后缀)。

  • tickformat:用于格式化刻度标签。例如,可选择四舍五入、添加美元符号、格式化日期等。

  • gridcolor:设置网格线颜色。可传入任意颜色名称(如 "green")或十六进制颜色(如 "#90EE90")。为简洁起见,我们仅使用这两种方式(当然也可传入RGB值等)。

  • gridwidth:网格线宽度,单位为像素。数值越大,线条越宽。确保 gridwidth 设置为0或更大。

  • showgrid:设为 True 时在每个刻度处显示网格线;设为 False 时则不显示该轴的网格线。

如需更多x轴和y轴参数,请查阅 Plotly 官方文档!


以下是上述所有参数的实际应用示例。请注意,虽然下图的视觉效果并不特别美观,但它充分展示了我们对图表各部分进行高度定制的能力。

1# 导入库 2import plotly.express as px 3import plotly.graph_objects as go 4import pandas as pd 5import numpy as np 6 7# 导入数据集 8health = pd.read_csv("/usr/local/csvfiles/health.csv") 9 10trace = go.Scatter(x=health['InfantMortality'], 11 y=health['Life_exp'], 12 mode='markers') 13 14fig = go.Figure(data=[trace]) 15 16# 高级x轴自定义 17xaxis_settings = go.layout.XAxis( 18 title=go.layout.xaxis.Title( 19 text='Infant Mortality', 20 font=dict(color='dodgerblue', size=30, family="Arial") 21 ), 22 tickfont=dict(color="darkgreen", size=16, family="Arial"), 23 tickangle=-45, 24 tickprefix='Infant Mortality = ', 25 ticksuffix=' Years', 26 tickformat='0.4f', # 四舍五入至小数点后四位 27 gridcolor='lime', 28 gridwidth=4, 29 showgrid=True, 30 ) 31 32# 高级y轴自定义 33yaxis_settings = go.layout.YAxis( 34 title=go.layout.yaxis.Title( 35 text='Life Expectancy', 36 font=dict(color='lavender', size=30, family="Arial") 37 ), 38 tickfont=dict(color="aqua", size=16, family="Arial"), 39 tickangle=-45, 40 tickprefix='Life Expectancy = ', 41 ticksuffix=' Years', 42 tickformat='0.4f', # 四舍五入至小数点后四位 43 gridcolor='hotpink', 44 gridwidth=4, 45 showgrid=True, 46 ) 47 48fig.update_layout(title='Life Expectancy vs Infant Mortality', # 简单标题 49 xaxis=xaxis_settings, # 应用x轴设置 50 yaxis=yaxis_settings # 应用y轴设置 51 ) 52 53fig.show()

这是本课所用所有代码练习的笔记本:

使用 Plotly 可视化机器学习模型

练习:标题和坐标轴