需求: 运行效果图:
想要在任意位置添加坐标系,首先需要认识axes()函数,下面就来介绍这个函数
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)。"left,bottom"这两个数可以理解为坐标系的左下方的角的坐标,left表示横坐标,可以控制坐标系的左右位置;bottom表示纵坐标,可以控制坐标系的上下位置。“width,height”这两个数可以控制坐标系的大小,width表示坐标系的宽度,height表示坐标系的高度。
projection:表示坐标系的类型,它的值可以是None、'aitoff'、'hammer'、'lambert'、'mollweide'、'polar'或'rectilinear'中任一取值,也可以使用自定义的类型
polar:表示使用极坐标,若设为True,则其作用等价于projection='polar'
aspect:表示坐标轴的比例,可接收'auto','equal',num中任一取值。默认为'auto',表示长方形;'equal'表示正方形;num表示一个纵轴比横轴的浮点数,例如num=2,表示y轴的占比为2,横轴的占比为1。
frame_on:表示是否显示每个坐标轴的轴脊
在需求(1)中需要距离画布顶部0.2(应该是底部)、左侧0.2的位置上添加一个宽度为0.5、高度为0.5的绘图区域
代码如下
ax = plt.axes((0.2, 0.2, 0.5, 0.5),aspect=2)
在需求(2)需要为x轴添加刻度标签,同时结合效果图,可以知道刻度标签有轻微的旋转,大约是15度左右,在需求(3)需要将刻度线调为方向向内,宽度为2,长度为8的样式,下面先来讲述用法,然后讲述代码
刻度标签语法:
matplotlib.pyplot.xticks(ticks=None, labels=None, *, minor=False, **kwargs)
参数说明:
ticks:表示显示刻度位置的列表,该参数可以设置空列表,以此禁用x轴的刻度
labels:表示对ticks位置过刻度添加标签的列表
在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:表示刻度线与刻度标签的距离。
labebsize:表示刻度标签的字体大小。
labelcolor:表示刻度标签的颜色。
bottom, top, left, right:表示是否显示下方、上方、左侧、右侧的刻度线。
labelbottom, labeltop,labelleft, labelright:表示是否显示下方、上方、左侧、右侧的刻度标签。
labelrotation:表示刻度标签旋转的角度
代码如下
weekday_data=['周一', '周二', '周三', '周四', '周五', '周六', '周日']
plt.xticks(x_data,labels=weekday_data)
ax.tick_params(axis='x', direction='in', length=8, width=2,labelrotation=15)
在需求(4)中需要隐藏坐标轴的上轴脊和右轴脊,下面先来介绍用法,再来写代码
matplotlib可以只隐藏坐标轴的部分轴脊,只需要访问spines属性获取相应的轴脊,之后调用set_color()方法将轴脊的颜色设为none
代码如下
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
仔细观察效果图发现,还有一些组件的元素要添加上去,例如,折线图的color是洋红色(m),marker是实心点(o),同时这个实心点的大小设置了15,linestyle是实线(-),添加了x和y轴的标签且字体大小大约都为15,其中y轴的标签旋转了90度,也就是将rotation参数的值设置为 'horizontal',并且将标签到轴脊的距离设置为30左右.
下面是完整代码
# matplotlib中文网 https://www.matplotlib.org
# 需求一:绘制某股票一周内收盘价折线图(见运行结果展示图)
import numpy as np
import matplotlib.pyplot as plt
# 0.设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 1.准备数据
x_data = np.arange(1,8,1)
y_data = [44.98, 45.02, 44.32, 41.05, 42.08, 42.08, 42.08] # 周末休市
weekday_data=['周一', '周二', '周三', '周四', '周五', '周六', '周日']
# 2.创建画布和坐标系
ax = plt.axes((0.2, 0.2, 0.5, 0.5))
# 3.绘图
plt.plot(x_data,y_data,'mo-',markersize=15)
# 4.定制刻度
plt.xticks(x_data,labels=weekday_data)
ax.tick_params(axis='y', direction='in', length=8, width=2)
ax.tick_params(axis='x', direction='in', length=8, width=2,labelrotation=15)
# 5.设置轴标签
plt.xlabel('周日期',fontdict={'fontsize':15})
plt.ylabel('收盘价($¥$)',rotation='horizontal',labelpad=30,fontdict={'fontsize':15})
# 6.隐藏上轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 7.展示图表
plt.show()
运行后的效果图