python 图例显示不全_Python matplotlib图例放在外侧保存时显示不完整问题解决

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

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之后的效果为:

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

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

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

这里有两个解决思想:

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

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

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

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

其默认数值分别为:

以上述图为例࿰

你可能感兴趣的:(python,图例显示不全)