chaoshu的个人博客分享 http://blog.sciencenet.cn/u/chaoshu

博文

matplotlib多重图例以及图例位置设置

已有 461 次阅读 2021-2-26 11:44 |个人分类:matplotlib|系统分类:科研笔记

一、多重图例

有时候我们可能需要在同一个图表维度中设计多个图例。不幸的是,Matplotlib 并没有提供很简单的方式实现:通过标准的legend接口,只能在整张图表上创建一个图例。如果你试图使用plt.legend()ax.legend()创建第二个图例,那么第二条语句创建的图例会覆盖第一条语句创建的。我们只能通过从底层开始来创建一个新的图例 artist 这种方法来解决这个问题,然后使用ax.add_artist()的底层方法手动将第二个作者加到图表上:


fig, ax = plt.subplots()
lines = []
styles = ['-', '--', '-.', ':']
x = np.linspace(0, 10, 1000)
for i in range(4):
    lines += ax.plot(x, np.sin(x - i * np.pi / 2),
                     styles[i], color='black')
ax.axis('equal')
# 指定第一个图例的线条和标签
ax.legend(lines[:2], ['line A', 'line B'],
          loc='upper right', frameon=False)
# 手动创建第二个图例,并将作者添加到图表中
from matplotlib.legend import Legend
leg = Legend(ax, lines[2:], ['line C', 'line D'],
             loc='lower right', frameon=False)
ax.add_artist(leg)
plt.show()

image.png

上例展示了用来组成任何 Matplotlib 图表的底层 artist 对象的简单说明。如果你去查看ax.legend()的源代码(你可以通过 IPython 的ax.legend?帮助工具做到),你可以看到这个方法包含了用来构建合适Legend的 artist 对象的逻辑,构建的对象被保存在legend_属性当中,当绘制时被添加到图表上进行展示.


二、图例位置

https://zhuanlan.zhihu.com/p/99531531

  • 一对浮点数(x,y),保存在元组中. 示例:loc = (0, 0)
    (x, y):此种形式是将legend的左下角放置在点(x, y)上,可参考下图:

左图中红点坐标分别为(2,2), (7,8) , (11,7) , (14,5)

通过左右两张图比较,很容易看出,右图中legend的左下角与点(x, y)重合。

注意:当使用loc=(x,y)时,x, y并不是轴域中实际的x, y的值,而是将x轴, y轴分别看成1, 即:(x/(x_max-x_min), y/(y_max-y_min))(归1处理);

在绘制上图时,其中xlim=(0, 16), ylim=(0, 9),所以如果将legend放置到点(2, 2)上,那loc实际要写成:

.legend(loc=(2/16, 2/9))





http://blog.sciencenet.cn/blog-858128-1273943.html

上一篇:matplotlib图例和标签中文乱码
下一篇:解决xlabel显示不全

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-4-13 15:22

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部