未加星标

Matplotlib 图例与标注

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二03 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

用Matplotlib作图相比于使用Origin这种商业软件更为程序化,当熟练了以后还是非常方便的。参考官方文档以及一些教程,不难做出一些比较好看的散点、柱状图等,这些也是在学术研究中比较常见的chart。

但是,常常我们需要在柱状图或者散点图上增加一些图例以及标注以增加图表的可读性,那么该怎么做呢?此处介绍两处笔者用到的增加图例与标注的方法:

from matplotlib import pyplot as plt
plt.figure()
ax = plt.subplot(111) # ax = plt.add_subplot(111)
图例

图例比较简单,笔者主要参考这篇 百度经验 ,在原来绘画的基础上,增加label属性

sin, = ax.plot(x, y1, color='red', label='sin')
cos, = ax.plot(x, y2, color='blue', label='cos')

然后画出图例,并标出其位置:

ax.legend(loc='lower right')

loc即location, lower right即右下角,也可以是upper right等等

使用label参数会相对省事一点,也可以这么做

sin, = ax.plot(x, y1, color='red')
cos, = ax.plot(x, y2, color='blue')
ax.legend((sin,cos),('sin','cos'),loc='lower right')

更为复杂的图例可以参考 这里 。

标注

对于柱状图或者折线图可能需要对每个点进行标注,用到的是ax.text函数,在这里也安利一个python库,叫adjust_text,这个工具的好处是可以不用考虑这些标注是否会遮挡图表的内容。

先说普通模式,比如柱状图:

x = [10,20,...]
y = [0.5,0.6,0.7...]
bars=ax.bar(x,y,color='green',tick_label=x,width=2)
for j,rect in enumerate(bars):
left = rect.get_x() # 得到这根柱子的横坐标(可以考虑向左位移)
# left,top: 得到柱子左上定点位置并产生个向上0.01的位移
top = rect.get_y() + rect.get_height() + 0.01
ax.text(left,top,'%.3f'%y[j]) # 标注柱子的“值”并且保留三位有效数字

如果用adjust_text,可以是:

x = [10,20,...]
y = [0.5,0.6,0.7,...]
bars=ax.bar(x,y,color='green',tick_label=x,width=2)
for j,rect in enumerate(bars):
left = rect.get_x()+1
top = rect.get_y()+rect.get_height()+0.01
texts.append(ax.text(left,top,'%.3f'%y[j]))
adjust_text(texts,autoalign='y', only_move={'points':'y', 'text':'y'},force_points=0.5, expand_text=(1.2, 1.3), ha='center')

效果参考: https://github.com/Phlya/adjustText/blob/master/examples/Examples.ipynb

其中 In[17] 是笔者所作的图并被选为案例。adjust_text在原有的基础上对位置进行了稍微的调整,还允许repulsive point,用以人工干预微调。

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

分页:12
转载请注明
本文标题:Matplotlib 图例与标注
本站链接:http://www.codesec.net/view/483315.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(110)