坐标轴的结构相同,主要包括轴脊、刻度,其中刻度又可以细分为刻度线和刻度标签,刻度线又可以细分为主刻度线和次刻度线。坐标轴的各部分均是matplotlib类的对象:坐标轴是axis.Axis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。此外,常用的x轴是一个axis.Xaxis类的对象,y轴是一个axis.Yaxis类的对象。如前所述的所有类的对象均包含于Axes类对象中,可通过Axes类的一些属性分别获取,关于这些属性的介绍如下。
- xaxis : 获取x轴。
- yaxis : 获取y轴。
- spines :获取包含全部轴脊的字典。
访问 spines 属性后会返回一个OrderedDict类的对象。OrderedDict类是dict的子类,可以维护添加到字典中的键值对的顺序。例如,获取某坐标轴的全部轴脊,代码如下。
print(ax.spines)
matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。pyplot模块可以使用axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。axes()函数的语法格式如下:
axes(arg=None,projection=None,polar=False, aspect, frame_on,**kwargs)
该函数常用参数的含义如下。
(1)参数arg 支持 None、4-tuple中任一取值,每种取值的含义如下。
- None : 表示使用subplot(111)添加的与画布同等大小的Axes对象。
- 4-tuple :由4个浮点型元素(取值范围为0~1)组成的元组(left,bottom,width, height),前两个元素left 和bottom 分别表示坐标轴左侧和底部的边缘到画布的相对距离,用于确定坐标轴的位置;后两个元素width 和height分别表示坐标轴的宽度和高度,用于确定坐标轴的相对大小。
(2)参数projection表示坐标轴的类型。
可以是None、'aitoff"、'hammer'、'lambert'、'mollweide'、'polar' 或'rectilinear' 中的任一取值,也可以使用自定义的类型。
(3)参数polar 表示是否使用极坐标,若设为True,则其作用等价于projection='polar'。
(4)参数aspect 表示坐标轴缩放的比例,可接收'auto’、'equal、num 中任一取值。
(5)参数frame_on 表示是否绘制每个坐标轴的轴脊。
在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的,刻度线的颜色是黑色的等。pyplot中可以使用tick_params()函数定制刻度的样式。
tick_params()函数定制刻度的语法格式如下:
tick_params (axis='both',**kwargs)
该函数的常用参数的含义如下:
- axis :表示选择操作的轴,可以取值为'x'、'y'或 'both',默认为'both'。
- reset :若设为 True,表示在处理其他参数之前均使用参数的默认值。
- which:表示刻度的类型,可以取值为'major'、'minor'或'both',默认为'major'。
- direction :表示刻度线的方向,可以取值为'in'、'out' 或'inout'。
- length :表示刻度线的长度。
- width:表示刻度线的宽度。
- color : 表示刻度线的颜色。
- pad :表示刻度线与刻度标签的距离。
- labelsize :表示刻度标签的字体大小。
- labelcolor :表示刻度标签的颜色。
- bottom,top, left,right :表示是否显示下方、上方、左侧、右侧的刻度线。
- labelbottom, labeltop, labelleft, labelright :表示是否显示下方、上方、左侧、右侧的刻度标签。
- labelrotation :表示刻度标签旋转的角度。
导入所需库与plt绘图模式
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
准备数据
x_data = ('周一','周二','周三','周四','周五','周六','周日')
y_data = [44.98, 45.02, 44.32, 41.05, 42.08, 42.08, 42.08] # 周末休市
创建画布和坐标系
fig = plt.figure()
ax = plt.axes((0.3,0.3,0.5,0.5))
绘图
ax.plot(x_data,y_data,color='g',marker='o',markersize=15)
定制刻度
ax.xaxis.set_tick_params(direction='in',length=5,width=2,labelrotation=35)
ax.yaxis.set_tick_params(direction='in',length=5,width=2)
设置轴标签
设置 rotation参数可以随意调节y轴标题方向, rotation默认为90°,如果想将y轴标题调为垂直方向,则设为0。但这样也会带来一些问题,比如旋转后的标题不是位于上下方向的居中位置,可以调节y的值设置标题的上下位置,例如:
ax.set_xlabel('周日期')
ax.set_ylabel('收盘价(¥)',rotation=0,x=0.1,y=1)
隐藏上轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
展示图表
plt.show()
完整代码如下:
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
#设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 1.准备数据
x_data = ('周一','周二','周三','周四','周五','周六','周日')
y_data = [44.98, 45.02, 44.32, 41.05, 42.08, 42.08, 42.08] # 周末休市
#创建画布和坐标系
fig = plt.figure()
# 在画布的任意位置添加指定大小的坐标系
ax = plt.axes((0.3,0.3,0.5,0.5)) # 画布的取值范围(0-1)
#绘图
ax.plot(x_data,y_data,color='g',marker='o',markersize=15)
#定制刻度
ax.xaxis.set_tick_params(direction='in',length=5,width=2,labelrotation=35)
ax.yaxis.set_tick_params(direction='in',length=5,width=2)
#设置轴标签
ax.set_xlabel('周日期')
ax.set_ylabel('收盘价(¥)',rotation=0,x=0.1,y=1)
#隐藏上轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
#展示图表
plt.show()