Matplotlib 图题、图例以及轴标签
一、图题、图例、轴标签的方法
分别是下面三种方法:
- 图题: plt.title()
- 图例:plt.legend()
- 轴标签:plt.xlabel()、plt.ylabel()
使用label参数,为绘制的每条线添加一个标签,然后使用legend方法展示出来。
plt.plot(x, np.cos(x),'-g',label='cos(x)')
plt.plot(x, np.sin(x),':b',label='sin(x)')
plt.title('a cos curve')
plt.xlabel("X")
plt.ylabel("cos(X)")
plt.legend()
注:大多数的plt方法都可以直接转换成ax方法,比如plt.plot()->ax.plot()
,plt.legend()->ax.legend()
。但并不是所有的都可以,比如下面的需要这么转换:
- plt.xlabel() -> ax.set_xlabel()
- plt.ylabel() -> ax.set_ylabel()
- plt.xlim() -> ax.set_xlim()
- plt.ylim() -> ax.set_ylim()
- plt.title() -> ax.set_title()
在面向对象接口画图的时候,不需要单独调用这些函数,使用ax.set()方法一次性设置即可:
x = np.linspace(0,10,100)
ax = plt.axes()
ax.plot(x,np.sin(x))
ax.set(xlim=(0,10),ylim=(-2,2),xlabel='x',ylabel='sin(x)',title='a sin plot')
二、图题的配置
title标题方法,也有许多可以配置的参数:
- fontsize:字体大小,默认12,也可以使用
xx-small....
字符串系列 - fontweight:字体粗细,或者'light'、'normal'、'medium'、'semibold'、'bold'、 'heavy'、'black'。
- fontstyle: 字体类型,或者'normal'、'italic'、'oblique'。
- verticalalignment:垂直对齐方式 ,或者'center'、'top'、'bottom'、'baseline'
- horizontalalignment:水平对齐方式,可选参数:‘left’、‘right’、‘center’
- rotation:旋转角度
- alpha: 透明度,参数值0至1之间
- backgroundcolor: 背景颜色
- bbox:给标题增加外框 ,常用参数如下:
- boxstyle:方框外形
- facecolor:(简写fc)背景颜色
- edgecolor:(简写ec)边框线条颜色
- edgewidth:边框线条大小
下面是一些使用的例子:
plt.title('A Title',fontsize='large',fontweight='bold') #设置字体大小与尺寸
plt.title('A Title',color='yellow') #设置字体颜色
plt.title('A Title',loc ='left') #设置字体位置
plt.title('A Title',verticalalignment='bottom') #设置垂直对齐方式
plt.title('A Title',rotation=45) #设置字体旋转角度
plt.title('A Title',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) #设置标题边框
实际上,title标题方法的大部分参数也适用于xlabel和ylabel坐标轴标签方法。
三、图例的配置
legend图例方法有很多可以配置的参数和选项:
参数 | 说明 |
loc | 图例的位置 |
prop | 字体参数 |
fontsize | 字体大小 |
markerscale | 图例标记与原始标记的相对大小 |
markerfirst | 如果为True,则图例标记位于图例标签的左侧 |
numpoints | 为线条图图例条目创建的标记点数 |
scatterpoints | 为散点图图例条目创建的标记点数 |
scatteryoffsets | 为散点图图例条目创建的标记的垂直偏移量 |
frameon | 是否显示图例边框 |
fancybox | 边框四个角是否有弧度 |
shadow | 控制是否在图例后面画一个阴影 |
framealpha | 图例边框的透明度 |
edgecolor | 边框颜色 |
facecolor | 背景色 |
ncol | 设置图例分为n列展示 |
borderpad | 图例边框的内边距 |
labelspacing | 图例条目之间的垂直间距 |
handlelength | 图例句柄的长度 |
handleheight | 图例句柄的高度 |
handletextpad | 图例句柄和文本之间的间距 |
borderaxespad | 轴与图例边框之间的距离 |
columnspacing | 列间距 |
title | 图例的标题 |
对于loc这个图例在坐标轴中的放置位置,有两种表示方法:数字或者字符串,其对应关系如下:
- 0: ‘best' : 自动选择最适合的位置
- 1: ‘upper right': 右上
- 2: ‘upper left': 左上
- 3: ‘lower left': 左下
- 4: ‘lower right':右下
- 5: ‘right':右
- 6: ‘center left':左中
- 7: ‘center right':右中
- 8: ‘lower center':下中
- 9: ‘upper center': 上中
- 10: ‘center':中间
设置字体大小的参数fontsize可以使用整数或者浮点数,以及字符串‘xx-small’、 ‘x-small’、 ‘small’、‘medium’、 ‘large’、 ‘x-large’和‘xx-large’。
下面是一些使用的例子
plt.legend(loc='best',frameon=False) #去掉图例边框
plt.legend(loc='best',edgecolor='blue') #设置图例边框颜色
plt.legend(loc='best',facecolor='blue') #设置图例背景颜色,若无边框,参数无效
plt.legend(loc='best',title='figure') #去掉图例边框
plt.legend(loc='upper left', ncol=2, frameon=False) # 分两列显示,在左上角
plt.legend(fancybox=True,framealpha=1, shadow=True, borderpad=1)
默认情况下,图例会忽略那些不带标签的绘图,只为设置了label参数的绘图添加图例。
有时候可能需要在同一张图上显示多个图例。不过,用普通方法解决不了这个问题,标准的legend接口只能为一张图创建一个图例。但是可以通过plt.gca().add_artist()
方法(或者ax.add_artist()
),将先前创建过的图例用底层的接口重新添加上去。
lines = []
styles= ['-', '--','-.',':']
x = np.linspace(0,10,1000)
for i in range(4): # 制造四条sin曲线
lines += plt.plot(x, np.cos(x-i*np.pi/2), styles[i])
plt.axis('equal')
# 生成第一个图例,并保存引用
leg = plt.legend(lines[:2], ['line A', 'line B'], loc=1,frameon=False)
# 生成第二个图例,这会让第一个图例被抹去
plt.legend(lines[2:], ['line C', 'line D'], loc=4,frameon=False)
# gca方法获取当前坐标轴,再使用它的`add_artist`方法将第一个图例重新画上去
plt.gca().add_artist(leg)