python画图的图例显示不出来_Python matplotlib图例放在外侧保存时显示不完整问题解决...

当使用matplotlib保存带有图例的矢量图时,图例可能会显示不完整。问题在于savefig()函数的bbox仅截取部分图像。解决办法有两种:1. 调整subplots_adjust()的right参数,使图例移入bbox;2. 使用bbox_inches='tight',自适应调整bbox大小。本文通过示例代码详细解释了这两种方法。
摘要由CSDN通过智能技术生成

上次说到的,使用如下代码保存矢量图时,放在外侧的图例往往显示不完整:

import numpy as np

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

x1 = np.random.uniform(-10, 10, size=20)

x2 = np.random.uniform(-10, 10, size=20)

#print(x1)

#print(x2)

number = []

x11 = []

x12 = []

for i in range(20):

number.append(i+1)

x11.append(i+1)

x12.append(i+1)

plt.figure(1)

# you can specify the marker size two ways directly:

plt.plot(number, x1, 'bo', markersize=20,label='a') # blue circle with size 20

plt.plot(number, x2, 'ro', ms=10,label='b') # ms is just an alias for markersize

lgnd=plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0,numpoints=1,fontsize=10)

lgnd.legendHandles[0]._legmarker.set_markersize(16)

lgnd.legendHandles[1]._legmarker.set_markersize(10)

plt.show()

fig.savefig('scatter.png',dpi=600)

保存为scatter.png之后的效果为:

2020072810213261.png

可以看到放在图像右上的图例只显示了左边一小部分。

这里的原因很简单,使用savefig()函数进行保存矢量图时,它是通过一个bounding box (bbox, 边界框),进行范围的框定,只将落入该框中的图像进行保存,如果图例没有完全落在该框中,自然不能被保存。

懂得了其原理,再进行解决问题就比较简单了。

这里有两个解决思想:

1. 将没有完全落入该bbox的图像,通过移动的方法,使其完全落入该框中,那么bbox截取的图像即是完整的 (将图像移入bbox中);

2. 改变bbox的大小,使其完全包含该图像,尤其是往往落入bbox外侧的图例 (将bbox扩大到完全包含图像)。

下面分别介绍基于这两个思想解决这个问题的两种方法:

在该官方文档中可以看到,subplots_adjust()函数的作用是调整子图布局,它包含6个参数,其中4个参数left, right, bottom, top的作用是分别调整子图的左部,右部,底部,顶部的位置,另外2个参数wspace, hspace的作用分别是调整子图之间的左右之间距离和上下之间距离。

其默认数值分别为:

2020072810213262.png

以上述图为例,现考虑既

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值