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)

posted @ 2020-04-27 09:55  如心幻雨  阅读(4020)  评论(0编辑  收藏  举报