Python数据可视化matplotlib:第四回:⽂字图例尽眉⽬
Python数据可视化matplotlib:第四回:⽂字图例尽眉⽬
1. Figure和Axes上的⽂本
⼤家可以看到有些论⽂或者博客上都有绘制的很漂亮的图,其中⼤部分都在图形绘制上进⾏⼀定的注释说明,以增强图像的可读性。在matplotlib⾥⾯⽀持⼴泛的⽂本⽀持,包括对数学表达式的⽀持(⼀般是LaTeX数学公式)、对栅格和⽮量输出的TrueType⽀持、具有任意旋转的换⾏分隔⽂本以及Unicode⽀持。
1.1 ⽂本API⽰例
下⾯的命令是介绍了通过pyplot API和objected-oriented API分别创建⽂本的⽅式。⼤家可以轻松看到其中的不同点,OO模式的⼀般⽐pyploy模式前⾯需要多加⼀个set,当然这只是⽅法上的命名不同。可以看见其⽅法效果都是⼀致的。
pyplot API OO API description
text text在⼦图axes的任意位置添加⽂本
annotate annotate在⼦图axes的任意位置添加注解,包含指向性的箭头
xlabel set_xlabel为⼦图axes添加x轴标签
ylabel set_ylabel为⼦图axes添加y轴标签
title set_title为⼦图axes添加标题
figtext text在画布figure的任意位置添加⽂本
suptitle suptitle为画布figure添加标题
教程中的⽰例使⽤的是OO模式,由于使⽤pyplot模块也可以达到相同的效果,所以我⾃⼰使⽤pyplot的API写了⼀遍。
code:
plt.figure()
# 创建⼦图
plt.subplot(111)
# 设置⼦图title
plt.title("axes title")
# 设置x和y轴标签
plt.xlabel('xlabel')
plt.ylabel('ylabel')
# 设置x和y轴显⽰范围均为0到10
plt.xlim(0,10)
plt.ylim(0,10)
# 在⼦图添加⽂本
<(3,8,'boxed italics text in data coords', style='italic',
bbox={'facecolor':'red','alpha':0.5,'pad':10})
# 在画布上添加⽂本,⼀般在⼦图上添加⽂本是更常见的操作,这种⽅法很少⽤
plt.figtext(0.4,0.8,'This is text for figure')
plt.plot([2],[1],'*')
# 添加注解
plt.annotate('annotate', xy=(2,1), xytext=(3,4),arrowprops=dict(facecolor='black', shrink=0.05))
plt.suptitle('bold figure suptitle BY PYPLOT', fontsize=14, fontweight='bold')
plt.show()
原图和效果图如下:
可以看见达到的效果都是⼀样的,⼤家在学习过程中也可以多多使⽤不同的⽅法来尝试,可能有些仅仅只是部分参数不同,但是也会很有意思。下⾯就从不同⽅⾯详细介绍⼀下这些API的⽤法和参数。
1.2 text - ⼦图上的⽂本
当你去官⽅⽂档搜索text的时候会有很多搜索结果这篇教程就是下⾯两种结果,⼀种是Axes对象下的text,⼀种是pyplot下的⼀种API
text的主要参数就是x, y, s,x和y代表了⽂本出现的坐标位置,s即为⽂本的内容。然后就是可选参数** kwargs和fontdict。在设置⽂本样式的时候可以分别使⽤这两种⽅法。
下⾯是使⽤pyplot的API绘制的代码
code:
plt.figure(figsize =(10,3))
# 给第⼀幅⼦图添加⽂本, 使⽤关键字参数修改⽂本样式
plt.subplot(1,2,1)
<(0.3,0.8,'modify by **kwargs', style='italic',
bbox={'facecolor':'red','alpha':0.5,'pad':10})
plt.title("First")
# 给第⼆幅⼦图添加⽂本,使⽤fontdict参数修改⽂本样式
plt.subplot(1,2,2)
font ={'bbox':{'facecolor':'red','alpha':0.5,'pad':10},'style':'italic'}
<(0.3,0.8,'modify by fontdict', fontdict=font)
plt.title("Second")
plt.suptitle("text style", fontsize =15)
plt.show()
效果图如下:
matplotlib中所有⽀持的样式参数请参考说明,⼤多数时候需要⽤到的时候再查询即可。⼀般情况下能掌握下⾯常⽤的⼀些参数即可。
Property Description
alpha float or None 透明度,越接近0越透明,越接近1越不透明
backgroundcolor color ⽂本的背景颜⾊
bbox dict with properties for patches.FancyBboxPatch ⽤来设置text周围的box外框
color or c color 字体的颜⾊
fontfamily or
family
{FONTNAME, ‘serif’, ‘sans-serif’, ‘cursive’, ‘fantasy’, ‘monospace’} 字体的类型fontsize or size float or {‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’} 字体⼤⼩
fontstyle or style{‘normal’, ‘italic’, ‘oblique’} 字体的样式是否倾斜等
fontweight or weight {a numeric value in range 0-1000, ‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’,‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’} ⽂本粗细
horizontalalignment
or ha
{‘center’, ‘right’, ‘left’} 选择⽂本左对齐右对齐还是居中对齐
linespacing float (multiple of font size) ⽂本间距
rotation float or {‘vertical’, ‘horizontal’} 指text逆时针旋转的⾓度,“horizontal”等于0,“vertical”等于90 verticalalignment
or va
{‘center’, ‘top’, ‘bottom’, ‘baseline’, ‘center_baseline’} ⽂本在垂直⾓度的对齐⽅式
1.3 xlabel和ylabel ⼦图的x,y轴标签
在OO模式中调⽤⽅法为Axes.set_xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwarg
s)
在pyplot⾥的⽅法为pyplot.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
其中xlabel即为标签内容, labelpad为标签和坐标轴的距离(竖直⽅向),loc为标签位置,默认居中。
code:
# 观察labelpad和loc参数的使⽤效果
plt.figure(figsize=(10,3))
plt.subplot(1,2,1)
plt.xlabel('xlabel',labelpad=20,loc='left', fontsize =15)
# loc参数仅能提供粗略的位置调整,如果想要更精确的设置标签的位置,可以使⽤position参数+horizontalalignment参数来定位
# position由⼀个元组过程,第⼀个元素0.2表⽰x轴标签在x轴的位置,第⼆个元素对于xlabel其实是⽆意义的,随便填⼀个数都可以
# horizontalalignment='left'表⽰左对齐,这样设置后x轴标签就能精确定位在x=0.2的位置处
plt.subplot(1,2,2)
plt.xlabel('xlabel', position=(0.2, _), fontsize =15, horizontalalignment='left')
plt.show()
可以发现上图xlabel的位置和我们⽇常见到的不同,但是⼀般情况下都是居中显⽰,除⾮是有要求坐标的位置,或者当你绘制的⼦图显⽰有重合的部分,可以单独设置⼀下,也可以使⽤前⾯学到的tight_layout()⽅法。
1.4 title 和 suptitle - ⼦图和画布的标题
其实以上这些⽅法在第三回中就有使⽤过,只是没有单独拿出来详细介绍⼀下,在设置⼦图标签时,不管是OO模式还是使⽤pyplot模
块,suptitle都是设置画布标题,title设置⼦图标题。
其中title的调⽤⽅式为Axes.set_title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
其中label为⼦图标签的内容,fontdict,loc,**kwargs和上⾯都是⼀样的。
pad是指标题偏离图表顶部的距离,默认为6
y是title所在⼦图垂向的位置。默认值为1,即title位于⼦图的顶部。
suptitle的调⽤⽅式为figure.suptitle(t, **kwargs)
其中t为画布的标题内容
code:
plt.figure(figsize =(10,3))
plt.suptitle('This is figure title by pyplot', y =1.2)#通过参数y设置⾼度
# 添加⼦图,并未⼦图设置标题
plt.subplot(1,2,1)
plt.title('This is title', pad =15)
plt.subplot(1,2,2)
plt.title('This is title', pad =8, loc ='left')
plt.show()
1.5 annotate - ⼦图的注解
annotate的使⽤⽅法,格式设置是很多元化的,在不同的图表中所需要的注解形式不⼀样。接下来介绍⼀下使⽤⽅法,然后我们再⽤pyplot模块来尝试着对例⼦的内容进⾏⼀定的修改,来多多熟悉其内容。
annotate的调⽤⽅式为Axes.annotate(text, xy, *args, **kwargs)
其中text为注解的内容,
xy为注解箭头指向的坐标,
其他常⽤的参数包括:
xytext为注解⽂字的坐标,
xycoords⽤来定义xy参数的坐标系,
textcoords⽤来定义xytext参数的坐标系,
arrowprops⽤来定义指向箭头的样式
annotate的参数⾮常复杂,这⾥仅仅展⽰⼀个简单的例⼦,更多参数可以查看
code:
# 设置画布
plt.figure()
# 创建数据
x = np.arange(-5.0,5.0,0.01)
y = np.cos(2*np.pi*x)
# 绘制图像
plt.plot(x, y, linewidth =3)
plt.annotate('local max', xy=(3,1), xycoords='data',
xytext=(0.8,0.95), textcoords='axes fraction',
arrowprops=dict(facecolor='black', shrink=0.05),
horizontalalignment='right', verticalalignment='top',
)
fontweight属性bold
plt.annotate('(0,1)', xy =(170,165), xycoords ='axes points',
xytext =(0.5,0.9),textcoords='axes fraction',
arrowprops=dict(arrowstyle ="wedge", facecolor='orange', shrinkA =1, shrinkB =1))
plt.ylim(-2,2)
plt.xlim(-x[-1]-1, x[-1]+1)
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论