Matplotlib中的titles(标题)、labels(标签)和legends(图例)

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文讨论Python的Matplotlib绘图库中可用的不同标记选项。

Matplotlib是一个Python中常用的绘图库,用于创建各种类型的图表。在Matplotlib中,你可以使用titles(标题)、labels(标签)和legends(图例)来增强你的图表。本文讨论Python的Matplotlib绘图库中可用的不同标记选项。

Figure, subplots 和axes列表

在Matplotlib中,Figure是整个图形窗口,它可以包含一个或多个子图(Axes)。Axes是实际绘图区域,而Figure则是包含所有Axes、标题、标签等元素的容器。

在使用可以使用Matplotlib时可以使用plt.subplots()命令一次创建多个子图的占位符,输入参数nrows和ncols定义要返回的行和列的数量。返回数组包含ncols=2个元素的nrows=2个列表。每个元素都引用一个子图。

 import matplotlib.pyplot as plt

 fig, axs = plt.subplots(
   nrows=2, ncols=2, figsize=(10, 7), sharex=True, sharey=True
 )

 # Fig = Figure object,
 # axs = list of axes
 # axs = [[ax1, ax2], 
 #        [ax3, ax4]]

axes和labels

axis指的是子图,通常称为ax的轴对象中的x轴和y轴的一个组合。我们使用列表推导遍历所有轴,并使用ax.set_xlabel("whatever")为每个子图分配xlabel和ylabel。可以通过调用ax2 = ax.twinx()来创建另一个y轴;ax2.set_ylabel(“Second y-axis”);但这会使绘制图例等事情变得复杂,因为现在绘图配置在同一子图中被分成两个容器,所以我们一般都会将一个x轴和y轴放在一个子图中,也就是我们上面说的一个组合。

 i = 1
 for ax in [item for sublist in axs for item in sublist]:
   ax.set_xlabel(f"xlabel {i}")
   ax.set_ylabel(f"ylabel {i}")
   i+=1

Titles

每个子图最多可以有三个标题Titles 。默认情况下,子图标题显示在子图的上方。使用loc参数可以将唯一的标题与子图的左边缘或右边缘对齐,也可以向子图添加其他标题。有时将主标题左对齐并添加更多信息(如数据源)可能会很有用,或者使用不同的字体或较小的字体右对齐。

 ax.set_title(f"Title {i} left", loc="left", fontsize=8)
 ax.set_title(f"Title {i} right", loc="right", fontsize=10)
 ax.set_title(f"Title {i} center", loc="center", fontsize=14)

在Matplotlib中,set_title和set_ylabel等函数可以将字体、字体大小和字体粗细作为参数或作为一个名为fontdict的字典。

 ax.set_title(f"Title {i} left", loc="left", fontdict=dict(
   size=8, 
   family="Times New Roman", 
   weight="bold")
 )

图的Title 和label

图标题在Matplotlib中称为suptitle。默认情况下,它是一个标题,在最上面的子标题中间对齐,字体大小比普通的子标题大。

与轴标签类似,y轴和x轴也有替代标签。默认情况下,Supylabel以居中对齐的方式出现在图的左侧,而supxlabel以居中对齐的方式出现在图的底部。

可以自定义图形标签和标题的位置,方法是使用x和y参数,ha用于水平对齐,va用于垂直对齐。x和y所指向的图坐标是从图的左下角开始的0到1之间的数字。suptitle的默认值是x=0.5和y=0.98,这使得它位于顶部和中间。

 fig.suptitle("Suptitle", fontsize=20)
 fig.supylabel("Supylabel", fontsize=16)
 fig.supxlabel("Supxlabel", fontsize=16)

子的图例legends

图例是子图中的辅助框,它告诉我们哪些数据点属于哪个逻辑组。当在单个子图中有多条线、多组标记等时,它们尤其有用。当调用ax.legend()时,每个没有以下划线开头的标签且包含在轴对象中的艺术家都会生成一个轴图例条目。像ax.scatter()和ax.plot()这样的绘图函数将label作为参数,默认情况下,这是创建图例时使用的标签。

 ax.scatter(
   np.random.random(30) * 0.45 + 0.3,
   np.random.random(30) * 0.45 + 0.3,
   label="label for data",
   alpha=0.3,
 )
 ax.legend(title=f"Legend {i} title", fontsize=8)

如果子图包含多个轴,例如当调用ax.twinx()时,需要在绘制图例之前收集对艺术家的引用并将它们组合起来,以避免在同一子图中绘制两个图例。

 lines_ax = ax.get_lines() 
 lines_ax2 = ax2.get_lines() 

 lines = lines_ax + lines_ax2 
 labels = [line.get_label() for line in lines]

 ax.legend(lines, labels, title=f"Legend {i} title", fontsize=8)

总结

通过上面的介绍,我们应该对这几个术语有了一定了解,那么我们来看看下面的代码

 import matplotlib.pyplot as plt
 import numpy as np

 fig, axs = plt.subplots(
   nrows=2, ncols=2, figsize=(10, 7), 
   sharex=True, sharey=True, squeeze=True
 )

 i = 1
 for ax in [item for sublist in axs for item in sublist]:
   ax.set_xlabel(f"xlabel {i}")
   ax.scatter(
     np.random.random(30) * 0.45 + 0.3,
     np.random.random(30) * 0.45 + 0.3,
     label="label for data",
     alpha=0.3,
   )
   ax.legend(title=f"Legend {i} title", fontsize=8)
   ax.set_xlim(0, 1)
   ax.set_ylim(0, 1)
   ax.set_title(f"Title {i} left", loc="left", fontsize=8)
   ax.set_title(f"Title {i} right", loc="right", fontsize=10)
   ax.set_title(f"Title {i} center", loc="center", fontsize=14)

   ax.tick_params(labelleft=False, labelbottom=False)
   ax.set_ylabel(f"ylabel {i}")
   i += 1

 fig.suptitle("Suptitle", fontsize=20)
 fig.supylabel("Supylabel", fontsize=16)
 fig.supxlabel("Supxlabel", fontsize=16)

 plt.tight_layout()
 plt.savefig("fig.png", dpi=200)

这就是绘制最上面图的代码,我们再把图展示一下,这样可以更加直观:

https://avoid.overfit.cn/post/d33dd6fdc9084327919ef5fb290ccc14

作者:Sami Kohvakka

目录
相关文章
|
7月前
|
数据可视化 Python
python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
83 0
|
15天前
|
前端开发 Python
Matplotlib 轴标签和标题
Matplotlib 轴标签和标题
25 6
|
2月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 轴标签和标题 1
使用 Matplotlib 的 `xlabel()` 和 `ylabel()` 方法为 x 轴和 y 轴添加标签。通过简单的 NumPy 数组操作和 Matplotlib 的绘图功能,您可以轻松地为图表添加描述性的轴标签,使数据可视化更加清晰明了。
138 5
|
2月前
|
前端开发 Python
Matplotlib 教程 之 Matplotlib 轴标签和标题 3
使用 Matplotlib 的 `title()`, `xlabel()`, 和 `ylabel()` 方法来设置图表标题及轴标签的位置,并通过实例展示了如何利用 `loc` 参数实现标题和标签的定位,同时演示了如何设置中文字体和样式。
27 1
|
2月前
|
Python
Matplotlib 教程 之 Matplotlib 轴标签和标题 2
使用 Matplotlib 设置图表标题和轴标签。通过 `title()`, `xlabel()`, 和 `ylabel()` 方法,可以分别为图表添加标题和 x、y 轴的标签。
16 0
|
4月前
|
数据可视化 Python
|
4月前
|
数据可视化 算法 Python
解决matplotlib文字标签遮挡问题
解决matplotlib文字标签遮挡问题
|
7月前
|
搜索推荐 数据可视化 Python
Matplotlib图表中的数据标签与图例设置
【4月更文挑战第17天】这篇文章介绍了如何在Python的Matplotlib库中设置数据标签和图例,以增强图表的可读性和解释性。主要内容包括:使用`text`函数添加基本和自定义数据标签,以及自动和手动创建图例。图例的位置和样式可通过`loc`和相关参数调整。文章强调了数据标签和图例结合使用的重要性,提供了一个综合示例来展示实践方法。良好的图表设计旨在清晰有效地传达信息。
|
7月前
|
机器学习/深度学习 数据可视化 搜索推荐
12个最常用的matplotlib图例 !!
12个最常用的matplotlib图例 !!
80 1
|
7月前
|
人工智能 算法 数据可视化
Matplotlib从入门到精通04-文字图例尽眉目
Matplotlib从入门到精通04-文字图例尽眉目
Matplotlib从入门到精通04-文字图例尽眉目