暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python数据可视化--注释文本的进阶使用

AI小白笔记 2021-11-11
1679

点击蓝字

关注我们


话说上节我们说到plt.annotate()函数的基本用法,本节继续说说它的进阶用法。


arrowprops属性


arrowprops属性表示箭头的样式,dict(字典)型数据,关键字“arrowstyle”常见的值有:



举两个例子:


import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']=['KaiTi'] #设置中文字体
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号


x=np.linspace(0,4*np.pi,100)
y=np.sin(x)


plt.plot(x,y)
plt.annotate('最大值',xy=(np.pi/2,1),xytext=(4,0.9),arrowprops=dict(arrowstyle='<->'),color='r',fontsize=15)
plt.annotate('最小值',xy=(3*np.pi/2,-1),xytext=(4.4,-0.75),arrowprops=dict(arrowstyle='-|>'),color='purple',fontsize=15)
plt.show()


其它箭头的样式请各位根据以上代码修改。


以下关键字是在不设置“arrowstyle”关键字的情况下才能使用:


  • width:箭头的宽度(单位是点)

  • headwidth :箭头头部的宽度(点)

  • headlength: 箭头头部的长度(点)

  • shrink :箭头两端收缩的百分比(占总长)


比如以上代码第11行改为:


plt.annotate('最小值',xy=(3*np.pi/2,-1),xytext=(4.4,-0.5),arrowprops=dict(width=2,headwidth=10,headlength=20,shrink=10),color='r',fontsize=15)


结果是:(重点比较两个图中最小值的箭头)


xycoords属性与textcoords属性

xycoords属性用于设置文本的坐标系,一般使用默认值“data”,即与图像共用一个坐标系。


textcoords属性选择为相对于被注释点xy的偏移量,‘offset points’或者’offset pixels’(点偏移量或像素偏移量)。


import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']=['KaiTi']    #设置中文字体


data=[74,83,91,98,101]
year=['2016','2017','2018','2019','2020']


plt.plot(year,data,marker='o')
plt.ylim(70,110)
for xy in zip(year,data):
   plt.annotate('%s' % xy[1], xy=xy, xytext=(-10,13),xycoords='data', textcoords='offset points',fontsize=10)                
plt.title('十三五期间GDP增长趋势图(单位:万亿)',fontsize=18)
plt.show()
   



第10-11行代码通过for循环将五年的GDP值显示在坐标系上,变量xy获取迭代对象zip(year,data)一个压缩后的元素,这个元素的类型是元组,元组第1个元素是年份,第2个元素是该年的GDP值,所以显示数据时使用xy[1],索引为1获取该年的GDP值。


第11行textcoords='offset points'的意思是将注释文本设置在圆点的相对点偏移量,偏移量由xytext=(-10,13)决定,也就是将该年的GDP值设置在相对于圆点偏左10个单位,偏上13个单位。



bbox属性


bbox属性用于设置注释文本的边框,字典类型,常用的关键字有:


  • boxstyle:方框外形

  • facecolor:(简写fc)背景颜色

  • edgecolor:(简写ec)边框线条颜色

  • edgewidth:边框线条大小


boxstyle常见的值如下:

Circle、DArrow、LArrow、RArrow、Round、Round4、Roundtooth、Sawtooth、Square


将以上GDP例子的代码改成以下形式:


import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family']=['KaiTi'] #设置中文字体


data=[74,83,91,98,101]
year=['2016','2017','2018','2019','2020']


plt.plot(year,data,marker='o')
plt.ylim(70,110)
for xy in zip(year,data):
plt.annotate('%s' % xy[1], xy=xy, xytext=(-10,13), textcoords='offset points',fontsize=10,
bbox=dict(boxstyle='round4,pad=0.5', facecolor='y', edgecolor='red', linewidth=2, alpha=0.4))
plt.title('十三五期间GDP增长趋势图(单位:万亿)',fontsize=18)
plt.show()



第12行的意思是给各年的GDP值添加边框,用round4风格的边框,边框大小(pad)是0.5,前景色是黄色(y),边框颜色是红色,边框线条宽度为2,透明度0.4。


将第12行改为:


bbox=dict(boxstyle='Circle,pad=0.8', facecolor='grey', edgecolor='green', linewidth=2, alpha=0.3)



其它的边框样式请各位一一修改,在此不展开叙述。


小结


如果注释文本能适当地添加在图形中,可以使图形更美观,可读性更强。plt.text()函数与plt.annotate()函数的参数较多,要想更好地掌握其用法,只有上机多练习,别无它法。


THE END


文章转载自AI小白笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论