跳转至

第6章 坐标轴的定制

· 向任意位置添加坐标轴 · 定制刻度 · 隐藏轴脊 · 移动轴脊

Notes:

 学习目标 掌握 坐标轴的创建方式,移动轴脊的位置 2

1

熟悉 坐标轴的结构 熟悉 熟悉 掌握

掌握 熟悉 隐藏全部轴脊,隐藏部分轴脊 4

掌握 定制刻度的位置和格式,定制刻度的样式 3

Notes:

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度 6.4 隐藏轴脊 6.5 移动轴脊 6.6 本章小结

目录页

6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度 6.4 隐藏轴脊 6.5 移动轴脊 6.6 本章小结

6.1 坐标轴概述 前文中使用的坐标轴会因位置和大小的限制、样式的固定而显得图表既单一且又不够灵活。matplotlib中提供了定制坐标轴的高级知识,包括添加坐标轴、定制坐标轴的刻度、隐藏坐标轴的轴脊、修改轴脊的位置等,便于用户灵活地操作坐标轴,使坐标轴能很好地配合图表。

6.1 坐标轴概述 在绘制图表的过程中,matplotlib会根据所绘图表的种类决定是否使用坐标系,或者显示哪种类型的坐标系,比如饼图无坐标系、雷达图使用极坐标系、折线图使用直角坐标系等。

直角坐标系 极坐标系

6.1 坐标轴概述 matplotlib中的直角坐标系由两条水平坐标轴、两条垂直坐标轴以及围成的绘图区域构成,以限制图形显示的区域,其左方和下方的坐标轴(叫做y轴和x轴)经常被使用。 坐标轴主要包括轴脊、刻度两大部分,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻度线和次刻度线。

6.1 坐标轴概述 坐标轴及其组成部分对应着matplotlib中一些类的对象:坐标轴是axis.Axis类的对象, x轴是axis.Xaxis类的对象,y轴是axis.Yaxis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。

Yaxis类的对象 Spine类的对象 Ticker类的对象 Xaxis类的对象

6.1 坐标轴概述 前面刚刚介绍的一些类的对象均属于Axes类的对象,可通过Axes类提供的一些属性进行获取。 xaxis:获取x轴。 yaxis:获取y轴。 spines:获取包含全部轴脊的字典。

C:\Users\admin\Desktop\图片\小人.jpg

6.1 坐标轴概述 使用Axes类的对象访问spines属性后,会返回一个OrderedDict类的对象。 OrderedDict类是dict的子类,它可以维护添加到字典中键值对的顺序。

print(ax.spines) 示例 从输出结果可以看出,字典中有4个包含Spine类对象的元组,它以元组的第一个元素为键,使用'left'、'right'、'bottom'、'top'分别可获取位于坐标轴左方、右方、下方和上方的Spine类对象。

OrderedDict([ ('left', ), ('right', ), ('bottom', ), ('top', )])

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度 6.4 隐藏轴脊 6.5 移动轴脊 6.6 本章小结

6.2 向任意位置添加坐标轴 matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。通过pyplot模块的axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。 语法

axes(arg=None, projection=None, polar=False, aspect, frame_on, **kwargs) arg:支持None、4-tuple中任一取值,其中None表示使用subplot(111)添加的与画布同等大小的Axes 对象,4-tuple表示由4个浮点型元素(取值范围为0~1)组成的元组 (left, bottom, width, height) 。 projection:表示坐标轴的类型,可以是None、'aitoff'、'hammer'、'lambert'、'mollweide'、'polar'或'rectilinear'中的任一取值,也可以是自定义的类型。 polar:表示是否使用极坐标,若设为True,则其作用等价于projection='polar'。

6.2 向任意位置添加坐标轴

还可以使用Figure类对象的add_axes()方法向当前画布的任意位置上添加Axes类对象。

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴

6.3 定制刻度 6.4 隐藏轴脊 6.5 移动轴脊 6.6 本章小结

6.3.1 定制刻度的位置和格式

matplotlib.ticker模块中提供了两个类:Locator和Formatter,分别代表刻度定位器和刻度格式器,用于指定刻度线的位置和刻度标签的格式。

6.3.1 定制刻度的位置和格式 刻度定位器 Locator是刻度定位器的基类,它派生了很多子类,通过这些子类构建的刻度定位器可以调整刻度的间隔、选择刻度的位置。

6.3.1 定制刻度的位置和格式 刻度定位器 matplotlib.dates模块中还提供了很多与日期时间相关的定位器,关于这些定位器的说明如下表所示。

6.3.1 定制刻度的位置和格式 刻度定位器

matplotlib也支持自定义刻度定位器,我们只需要定义一个Locator 的子类,并在该子类中重写___call__()方法即可。

6.3.1 定制刻度的位置和格式 刻度定位器 使用matplotlib的set_major_locator()或set_minor_locator()方法设置坐标轴的主刻度或次刻度的定位器。

创建一个HourLocator定位器,间隔为2小时

hour_loc = HourLocator(interval=2)

将hour_loc设为x轴的主刻度定位器

ax.xaxis.set_major_locator(hour_loc) 示例

6.3.1 定制刻度的位置和格式 刻度格式器 Formatter是刻度格式器的基类, 它派生了很多子类,通过这些子类构建的刻度格式器可以调整刻度标签的格式。Formatter的常见子类如右表所示。

6.3.1 定制刻度的位置和格式 刻度格式器 matplotlib.dates模块中还提供了很多与日期时间相关的格式器,关于这些格式器的说明如下表所示。

6.3.1 定制刻度的位置和格式 刻度格式器

matplotlib也支持自定义刻度格式器,只需要定义一个Formatter的子类,并在该子类中重写___call__()方法即可。

6.3.1 定制刻度的位置和格式 刻度格式器 使用matplotlib的set_major_formatter()或set_minor_formatter()方法可以设置坐标轴的主刻度或次刻度的格式器。

创建一个DateFormatter格式器 ,格式为x/x/x

date_fmt = DateFormatter('%Y/%m/%d')

将date_fmt设为x轴的主刻度格式器

ax.xaxis.set_major_formatter(date_fmt) 示例

6.3.2 定制刻度的样式 在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的,刻度线的颜色是黑色的等。使用tick_params()函数可以定制刻度的样式。 语法

tick_params(axis='both', **kwargs) axis:表示选择操作的轴,可以取值为'x'、'y'或'both',默认为'both'。 which:表示刻度的类型,可以取值为'major'、'minor'或'both',默认为'major'。 direction:表示刻度线的方向,可以取值为'in'、'out'或'inout'。 length:表示刻度线的长度。 width:表示刻度线的宽度。 color:表示刻度线的颜色。

6.3.2 定制刻度的样式 在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的,刻度线的颜色是黑色的等。使用tick_params()函数可以定制刻度的样式。 语法

tick_params(axis='both', **kwargs) pad:表示刻度线与刻度标签的距离。 labelsize:表示刻度标签的字体大小。 labelcolor:表示刻度标签的颜色。 bottom,top,left,right:表示是否显示下方、上方、左方、右方的刻度线。 labelrotation:表示刻度标签旋转的角度。

6.3.3 实例1:深圳市24小时的平均风速 本实例要求根据下表的数据,将时间列的数据作为x轴的刻度标签,将风速列的数据作为y轴的数据,使用plot()方法绘制反映深圳市24小时平均风速的折线图 。

6.3.3 实例1:深圳市24小时的平均风速

刻度线方向朝内,长度为6,宽度为2,标签大小为12

由图可知,中午12点的风速最强,约为22km/h;0点的风速最弱,约为8km/h 。 X轴刻度标签为固定格式的时间

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度

6.4 隐藏轴脊 6.5 移动轴脊 6.6 本章小结

6.4.1 隐藏全部轴脊 坐标轴一般将轴脊作为刻度的载体,在轴脊上显示刻度标签和刻度线。matplotlib中的坐标系默认有4个轴脊,分别是上轴脊、下轴脊、左轴脊和右轴脊,其中上轴脊和右轴脊并不经常使用,大多数情况下可以将上轴脊和右轴脊隐藏。

6.4.1 隐藏全部轴脊 使用pyplot的axis()函数可以设置或获取一些坐标轴的属性,包括显示或隐藏坐标轴的轴脊。 语法

axis(option, *args, **kwargs) 以上函数的参数option可以接收布尔值或字符串,其中布尔值True或False表示显示或隐藏轴脊及刻度;字符串通常是以下任一取值: ‘on’:显示轴脊和刻度,效果等同于True。 ‘off’:隐藏轴脊和刻度,效果等同于False。 'equal':通过更改轴限设置等比例。 'scaled':通过更改绘图框的尺寸设置等比例。 'tight':设置足够大的限制以显示所有的数据。 'auto':自动缩放。

Axes类的对象也可以使用axis()方法隐藏坐标轴的轴脊。

多学一招:patches模块 matplotlib.patches是专门用于绘制路径和形状的模块,该模块中提供了一些表示形状(诸如箭头、圆形、长方形等)的类,通过创建这些类的对象可以快速绘制常见的形状。常见形状对应的类及说明如下表所示。

多学一招:patches模块 以创建正多边形为例,RegularPolygon类构造方法的语法格式如下所示: 语法

RegularPolygon(xy, numVertices, radius=5, orientation=0, **kwargs) xy:表示中心点的元组(x,y) 。 numVertices:表示多边形顶点的数量。 radius:表示从中心点到每个顶点的距离。 orientation:表示多边形旋转的角度(以弧度为单位)。

多学一招:patches模块

示例 polygon = mpathes.RegularPolygon((0.5, 0.5), numVertices=5, radius=0.3, color='y')

示例 ax = plt.axes([0.3, 0.3, 0.5, 0.5]) ax.add_patch(polygon)

6.4.2 隐藏部分轴脊 matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性先获取相应的轴脊,再调用set_color()方法将轴脊的颜色设为none即可。

依次隐藏上轴脊、左轴脊和右轴脊

ax.spines['top'].set_color('none') ax.spines['left'].set_color('none') ax.spines['right'].set_color('none') 示例

6.4.2 隐藏部分轴脊 matplotlib可以通过set_ticks_position()方法设置刻度线的颜色为’none’,通过set_yticklabels()方法设置刻度标签为空列表。

vBot7fwTg7yg8EXjS6wr1HWXFZ+g+C+A5W7h7VdYxUaiXHWFwa2000tawRGQVCmfrp2yJx+D8NlEiZfgdZUTKMGoiZRg1kTKMmkgZRk2kzP8BhnkGHVE7jfYAAAAASUVORK5CYII= 示例

ax.yaxis.set_ticks_position('none') ax.set_yticklabels([])

6.4.3 实例2:深圳市24小时的平均风速 在6.3.3节的实例中,折线图显示了全部的轴脊,但其内部的右轴脊和上轴脊并未起到任何作用,因此本实例要求隐藏折线图的右轴脊和上轴脊。

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度 6.4 隐藏轴脊

6.5 移动轴脊 6.6 本章小结

6.5.1 移动轴脊的位置 matplotlib的Spine类中提供了一个可以设置轴脊位置的set_position()方法,通过这个方法可以将轴脊放置到指定的位置,以满足一些特定场景的需求。 语法

set_position(self, position) 以上方法的position参数表示轴脊的位置,该参数可以接收包含两元素的元组(position_type, amount),其中元素position_type代表位置类型,元素amount代表位置。 position参数还可以接收以下两个特殊的轴脊位置。 'center':值为('axes',0.5)。 'zero' :值为('data', 0.0)。

6.5.1 移动轴脊的位置 matplotlib的Spine类中提供了一个可以设置轴脊位置的set_position()方法,通过这个方法可以将轴脊放置到指定的位置,以满足一些特定场景的需求。 语法

set_position(self, position) position_type支持以下任一取值。 'outward':表示将轴脊置于移出数据区域指定点数的位置。 'axes':表示将轴脊置于指定的坐标系中(0.0~1.0)。 'data' :表示将轴脊置于指定的数据坐标的位置。

6.5.2 实例3:正弦与余弦曲线

正弦曲线和余弦曲线都属于周期性波浪线,它们在一个2π周期内重复出现。

6.5.2 实例3:正弦与余弦曲线 本实例要求先生成100个位于-2 * np.pi和2 * np.pi之间的等差数列,再求等差数列中各个数值的正弦值和余弦值,根据这些正弦值和余弦值绘制曲线。

X轴和y轴均移动 至值为0的位置

目录页 6.1 坐标轴概述

6.2 向任意位置添加坐标轴 6.3 定制刻度 6.4 隐藏轴脊 6.5 移动轴脊

6.6 本章小结

6.6 本章小结

本章主要介绍了坐标轴的定制,包括向任意位置添加坐标轴、定制刻度、隐藏轴脊和移动轴脊。通过学习本章的内容,希望读者掌握坐标轴的定制方法,从而使坐标轴更好地服务于图表。