一、Figure和Axes上的文本¶
Matplotlib具有广泛的文本支持,包括对数学表达式的支持、对栅格和矢量输出的TrueType支持、具有任意旋转的换行分隔文本以及Unicode支持。
1.文本API示例¶
下面的命令是介绍了通过pyplot API和objected-oriented API分别创建文本的方式。
pyplot API | OO API | description |
---|---|---|
|
| 在子图axes的任意位置添加文本 |
|
| 在子图axes的任意位置添加注解,包含指向性的箭头 |
|
| 为子图axes添加x轴标签 |
|
| 为子图axes添加y轴标签 |
|
| 为子图axes添加标题 |
|
| 在画布figure的任意位置添加文本 |
|
| 为画布figure添加标题 |
2.text - 子图上的文本¶
text的调用方式为Axes.text(x, y, s, fontdict=None, **kwargs)
其中x
,y
为文本出现的位置,默认状态下即为当前坐标系下的坐标值,s
为文本的内容,fontdict
是可选参数,用于覆盖默认的文本属性,**kwargs
为关键字参数,也可以用于传入文本样式参数
常用的参数:
Property | Description |
---|---|
| float or None 透明度,越接近0越透明,越接近1越不透明 |
| color 文本的背景颜色 |
| dict with properties for patches.FancyBboxPatch 用来设置text周围的box外框 |
| color 字体的颜色 |
| {FONTNAME, 'serif', 'sans-serif', 'cursive', 'fantasy', 'monospace'} 字体的类型 |
| float or {'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'} 字体大小 |
| {'normal', 'italic', 'oblique'} 字体的样式是否倾斜等 |
| {a numeric value in range 0-1000, 'ultralight', 'light', 'normal', 'regular', 'book', 'medium', 'roman', 'semibold', 'demibold', 'demi', 'bold', 'heavy', 'extra bold', 'black'} 文本粗细 |
| {'center', 'right', 'left'} 选择文本左对齐右对齐还是居中对齐 |
| float (multiple of font size) 文本间距 |
| float or {'vertical', 'horizontal'} 指text逆时针旋转的角度,“horizontal”等于0,“vertical”等于90 |
| {'center', 'top', 'bottom', 'baseline', 'center_baseline'} 文本在垂直角度的对齐方式 |
3.xlabel和ylabel - 子图的x,y轴标签¶
xlabel的调用方式为Axes.set_xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
ylabel方式类似,这里不重复写出。
其中xlabel
即为标签内容,fontdict
和**kwargs
用来修改样式,labelpad
为标签和坐标轴的距离,默认为4,loc
为标签位置,可选的值为'left', 'center', 'right'之一,默认为居中
4.title和suptitle - 子图和画布的标题¶
title的调用方式为Axes.set_title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
其中label为子图标签的内容,fontdict
,loc
,**kwargs
和之前小节相同不重复介绍pad
是指标题偏离图表顶部的距离,默认为6y
是title所在子图垂向的位置。默认值为1,即title位于子图的顶部。
suptitle的调用方式为figure.suptitle(t, **kwargs)
其中t
为画布的标题内容
5.annotate - 子图的注解¶
annotate的调用方式为Axes.annotate(text, xy, *args, **kwargs)
其中text
为注解的内容,xy
为注解箭头指向的坐标,
其他常用的参数包括:xytext
为注解文字的坐标,xycoords
用来定义xy参数的坐标系,textcoords
用来定义xytext参数的坐标系,arrowprops
用来定义指向箭头的样式
6.字体的属性设置¶
字体设置一般有全局字体设置和自定义局部字体设置两种方法。
二、Tick上的文本¶
设置tick(刻度)和ticklabel(刻度标签)也是可视化中经常需要操作的步骤,matplotlib既提供了自动生成刻度和刻度标签的模式(默认状态),同时也提供了许多让使用者灵活设置的方式。
1.简单模式¶
可以使用axis的set_ticks
方法手动设置标签位置,使用axis的set_ticklabels
方法手动设置标签格式
2.Tick Locators and Formatters¶
除了上述的简单模式,还可以使用Tick Locators and Formatters
完成对于刻度位置和刻度标签的设置。 其中Axis.set_major_locator和Axis.set_minor_locator方法用来设置标签的位置,Axis.set_major_formatter和Axis.set_minor_formatter方法用来设置标签的格式。这种方式的好处是不用显式地列举出刻度值列表。
set_major_formatter和set_minor_formatter这两个formatter格式命令可以接收字符串格式(matplotlib.ticker.StrMethodFormatter)或函数参数(matplotlib.ticker.FuncFormatter)来设置刻度值的格式 。
b) Tick Locators¶
在普通的绘图中,我们可以直接通过上图的set_ticks进行设置刻度的位置,缺点是需要自己指定或者接受matplotlib默认给定的刻度。当需要更改刻度的位置时,matplotlib给了常用的几种locator的类型。如果要绘制更复杂的图,可以先设置locator的类型,然后通过axs.xaxis.set_major_locator(locator)绘制即可
locator=plt.MaxNLocator(nbins=7)#自动选择合适的位置,并且刻度之间最多不超过7(nbins)个间隔 locator=plt.FixedLocator(locs=[0,0.5,1.5,2.5,3.5,4.5,5.5,6])#直接指定刻度所在的位置
locator=plt.AutoLocator()#自动分配刻度值的位置
locator=plt.IndexLocator(offset=0.5, base=1)#面元间距是1,从0.5开始
locator=plt.MultipleLocator(1.5)#将刻度的标签设置为1.5的倍数
locator=plt.LinearLocator(numticks=5)#线性划分5等分,4个刻度
三、legend(图例)¶
在具体学习图例之前,首先解释几个术语:
legend entry(图例条目)
每个图例由一个或多个legend entries组成。一个entry包含一个key和其对应的label。
legend key(图例键)
每个legend label左面的colored/patterned marker(彩色/图案标记)
legend label(图例标签)
描述由key来表示的handle的文本
legend handle(图例句柄)
用于在图例中生成适当图例条目的原始对象
以下面这个图为例,右侧的方框中的共有两个legend entry;两个legend key,分别是一个蓝色和一个黄色的legend key;两个legend label,一个名为‘Line up’和一个名为‘Line Down’的legend label
图例的绘制同样有OO模式和pyplot模式两种方式,写法都是一样的,使用legend()即可调用。
以下面的代码为例,在使用legend方法时,我们可以手动传入两个变量,句柄和标签,用以指定条目中的特定绘图对象和显示的标签值。
当然通常更简单的操作是不传入任何参数,此时matplotlib会自动寻找合适的图例条目。
legend其他常用的几个参数如下:
设置图例位置
loc参数接收一个字符串或数字表示图例出现的位置
ax.legend(loc='upper center') 等同于ax.legend(loc=9)
Location String | Location Code |
---|---|
'best' | 0 |
'upper right' | 1 |
'upper left' | 2 |
'lower left' | 3 |
'lower right' | 4 |
'right' | 5 |
'center left' | 6 |
'center right' | 7 |
'lower center' | 8 |
'upper center' | 9 |
'center' | 10
思考题¶
|