坐标轴概述
本次绘制图表过程中,matplotlib会根据所绘图表的类型决定是否使用坐标系,或者显示哪种类型的坐标系。matplotlib中的直角坐标系由两条水平坐标轴、两条垂直坐标轴以及围成的绘图区域构成,以限制图形显示的区域,其左侧和下方的坐标轴(叫作y轴和x轴)经常被使用,其他坐标轴很少被使用。
坐标轴的结构相同,主要包括轴脊、刻度、其中刻度又可以划分为刻度线和刻度标签,刻度线又可以细分为主刻度和次刻度线。坐标轴的各部分均是matplotlib类的对象:坐标轴是axis.Axis类的对象;轴脊是spines.Spine类的对象;刻度是axis.Ticker类的对象。此外,常用的x轴是一个axis.Xaxis 类的对象,y轴是一个axis.Yaxis类的对象。如前所述的所有类的对象均包含于Axes类对象中,可通过Axes类的一些属性分别获取,关于这些属性的介绍如下:
访问spines属性后会返回一个OederedDict类的对象。OederedDict类是dict的子类,它可以维护添加到字典中的键值对的顺序。例如,获取某坐标轴的全部轴脊,代码如下:
print(ax.spines)
向任意位置添加坐标轴
matplotlib支持向画布的任意位置添加自定义大小的坐标系统,同时显示坐标轴,而不再受规划区域的限制。pyplot模块可以使用axes()函数创建一个Axes类的对象,并将Axes类的对象添加到当前画布中。axes()函数的语法格式如下:
axes(arg=None,projection=None,polar=False,aspect,frame_on,**kwargs)
定制刻度的样式
在matplotlib中,坐标轴的刻度有着固定的样式,例如,刻度线的方向是朝外的,刻度线的颜色是黑色等。pyplot中可以使用tick_params()函数定制刻度的样式。tick_params()函数的语法格式如下:
tick_params(axis='both',**kwargs)
该函数的常用函数的含义如下:
隐藏轴脊
matplotlib中的坐标系默认有4个轴脊,分别是上轴脊、下轴脊、左轴脊和右轴脊。
隐藏全部轴脊
使用pyplot的axis()函数可以设置或获取一些坐标轴的属性,包括显示或隐藏坐标轴的轴脊。axis()函数的语法格式如下所示:
axis(option, *args, **kwargs)
该函数的参数option可以接收布尔值或字符串。其中,布尔值True表示显示轴脊和刻度,False 表示隐藏轴脊和刻度。字符串通常可以是以下任一取值:
隐藏部分轴脊
matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性获取相应的轴脊,之后调用set_color()方法将轴脊的颜色设为none即可。
移动轴脊
在matplotlib中,Spine类提供了一个设计轴脊位置的set_position()方法。set_position()方法的语法格式如下:
set_position(self,position)
例题
绘制某股票一周内收盘价折线图(要求如下图)
一、导入模块
%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 = np.arange(1,8,1)
y_data = [44.98, 45.02, 44.32, 41.05, 42.08, 42.08, 42.08] # 周末休市
四、创建画布和坐标系
fig = plt.figure()
ax = fig.add_axes((0.2, 0.2, 0.5, 0.5))
五、绘图
ax.plot(x_data, y_data,marker='o', color='purple', markersize=15)
#折线图数据标记样式为圆形,折线图颜色为紫色
六、定制刻度
ax.set_xticks([1,2,3,4,5,6,7])
ax.set_xticklabels(['周一','周二','周三','周四','周五','周六','周日'])
ax.tick_params(direction='in', width=2, length=8)
# 设置x,y轴刻度线样式朝内,刻度线长度为8、宽为2
ax.xaxis.set_tick_params(labelrotation=30)
# 设置x轴字体倾斜45°
七、设置轴标签
ax.set_xlabel('周日期')
ax.set_ylabel('收盘价(¥)',rotation='horizontal', labelpad = 25)
八、隐藏上轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
九、展示图表
plt.show()