📜  matplotlib savefig 图例被截断 - Python (1)

📅  最后修改于: 2023-12-03 15:17:35.199000             🧑  作者: Mango

matplotlib savefig 图例被截断 - Python

如果您在使用 Matplotlib 绘制图表后,发现保存图表时图例被截断或部分图例未被保存,这份文章可能有所帮助。

问题描述

当我们使用 Matplotlib 绘制图表后,在调用 savefig 方法保存图像时,有可能图例会被截断或部分图例未被保存。这是因为 Matplotlib 默认情况下会自动调整图例大小以适应当前画布,但在保存图像时并不会保存调整后的图例大小。

解决方案
方案一:手动调整图例大小

我们可以手动调整图例大小,以确保图例不会被截断或部分图例未被保存。可以使用 plt.legend 方法的 bbox_to_anchor 参数来调整图例位置和大小。下面是一个示例代码:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

# 绘制图像
ax.plot([1, 2, 3], [3, 6, 9], label="Line 1")
ax.plot([1, 2, 3], [2, 4, 6], label="Line 2")

# 调整图例位置和大小
ax.legend(loc="upper left", bbox_to_anchor=(0, 1.02, 1, 0.2), ncol=2, mode="expand")

# 保存图像
plt.savefig("image.png")

在上面的代码中,bbox_to_anchor 参数被设置为 (0, 1.02, 1, 0.2)。这个参数是一个四元组,分别表示图例左下角相对于画布左下角的 (x, y) 坐标和图例的宽度和高度。具体来说,(0, 1.02) 表示将图例放置在画布左下角的正上方,1 表示图例的宽度与画布宽度相同,0.2 表示图例高度为画布高度的 20%。

方案二:关闭自动调整图例大小功能

另一个解决办法是关闭 Matplotlib 的自动调整图例大小功能。可以使用 plt.rc 方法修改 Matplotlib 的默认设置。下面是一个示例代码:

import matplotlib.pyplot as plt

# 关闭自动调整图例大小功能
plt.rc("legend", fontsize=12)
plt.rc("legend", handlelength=2)
plt.rc("legend", borderpad=1.2)

fig, ax = plt.subplots()

# 绘制图像
ax.plot([1, 2, 3], [3, 6, 9], label="Line 1")
ax.plot([1, 2, 3], [2, 4, 6], label="Line 2")

# 保存图像
plt.savefig("image.png")

在上面的代码中,我们通过 plt.rc 方法修改了图例的字体大小、句柄长度和边框留白大小,以确保图例不会被截断或部分图例未被保存。

总结

Matplotlib 提供了两种解决方案来解决保存图像时图例被截断或部分图例未被保存的问题。手动调整图例大小是一种灵活而直观的方法,但需要耐心和经验;关闭自动调整图例大小功能则需要谨慎,建议只在特定情况下使用。希望本文能帮助读者解决问题,同时也能对 Matplotlib 有更深入的了解。