坐标轴概述:
在绘制图表的过程中,matplotlib会根据所绘制图表的类型决定是否使用坐标轴,或者显示哪种类型的坐标系。坐标轴的结构相同,主要包括轴脊和刻度。
坐标轴是axis.Axis类的对象,轴脊是spines.Spine类的对象,刻度是axis.Ticker类的对象。
xaxis:获取x轴
yaxis:获取y轴
spines:获取包含全部轴脊的字典
向任意位置添加坐标轴:
axes(arg=None, projection=None, polar=False, aspect, frame_on, **kwargs)
projection:坐标轴类型
polar:是否使用极坐标
aspect:坐标轴的缩放比例(可接收'auto','equal',num)
frame_on:是否绘制轴脊
定制刻度:
matplotlib.ticker模块中提供了两个类
locator是刻度定位器的基类,可以自动调节刻度的间隔、选择刻度的位置。
Formatter是刻度格式器的基类,用于调整刻度标签的格式
tick_params()函数可以定制刻度的样式:
tick_params(axis='both', **kwargs)
axis:选择操作的轴,'x'、'y'或'both'
which:刻度类型,‘major’、'minor'、'both',默认第一个
direction:刻度线方向,in,out,inout
隐藏轴脊:
axis(option, *args, **kwargs)
option可接收布尔值和字符串,True表示显示,Flase表示隐藏 \ on表示显示,off表隐藏
equal:通过更改轴限设置等比例
scaled:通过更改会话框的尺寸设置等比例
tight:设置足够大的限制以显示所有数据
auto:自动缩放
也可以隐藏部分轴脊,只需要访问spines属性获取响应的轴脊后调用set_color()方法将轴脊的颜色设置为none即可
移动轴脊:
set_position(self, position)
outward:将轴脊移出数据区域指定点数位置
axes:将轴脊置于坐标系(0.0~1.0)中
data:将轴脊置于指定的数据坐标位置
center:('axes',0.5)
zero:('data',0.0)
例题:绘制《股票一周的收盘价》折线图
周日期 | 收盘价 |
周一 | 44.98 |
周二 | 45.02 |
周三 | 44.32 |
周四 | 41.05 |
周五 | 42.08 |
周六 | —— |
周日 | —— |
根据表的数据绘制一个折线图,具体要求如下:
(1) 在距画布顶部0.2、左侧0.2的位置上添加一个宽度为0.5、高度为0.5的绘图区域;
fig = plt.figure() ax = fig.add_axes((0.2, 0.2, 0.5, 0.5))
(2)x轴的刻度标签为周日期;
ax.set_xlabel('周日期')
(3)刻度线样式调整:方向朝内、宽度为2,长度为8;
ax.tick_params(direction='in', width=2, length=8)
(4) 隐藏坐标轴的上轴脊、右轴脊。.
ax.spines['top'].set_color('none') ax.spines['right'].set_color('none')
完整代码如下:
#导入库,设置字体,导入数据
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, 'mo-', markersize=15)
#设置刻度
ax.set_xticks([1, 2, 3, 4, 5, 6, 7])
ax.set_xticklabels(['周一', '周二', '周三', '周四', '周五', '周六', '周日'])
#按要求调整刻度线
ax.tick_params(direction='in', width=2, length=8)
# 5.设置轴标签
ax.set_xlabel('周日期')
ax.set_ylabel('收盘价(元)')
#按要求藏上轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
#展示图表
plt.show()