情节图例掩盖了图中的情节线
Posted
技术标签:
【中文标题】情节图例掩盖了图中的情节线【英文标题】:Plot legend obscures plot lines in figure 【发布时间】:2021-11-03 19:23:25 【问题描述】:我正在使用matplotlib's gallery中的代码:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)')
plt.errorbar(x, y + 2, yerr=yerr, uplims=True, label='uplims=True')
plt.errorbar(x, y + 1, yerr=yerr, uplims=True, lolims=True,
label='uplims=True, lolims=True')
upperlimits = [True, False] * 5
lowerlimits = [False, True] * 5
plt.errorbar(x, y, yerr=yerr, uplims=upperlimits, lolims=lowerlimits,
label='subsets of uplims and lolims')
plt.legend(loc='lower right')
并且,我在 jupyter 的终端中收到以下输出:
但是,在 matplotlib 库中,图例被很好地隐藏在错误栏限制选择之下:
我该如何解决这个问题?目前我的项目的其他一些情节也有同样的问题,传说阻碍了情节,到目前为止我没有取得任何进展。
【问题讨论】:
另见How to put the legend out of the plot或直接更改图形大小fig = plt.figure(figsize=(6, 5))
【参考方案1】:
对于此示例,只需在最后添加 plt.tight_layout()
似乎可以解决重叠问题。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)')
plt.errorbar(x, y + 2, yerr=yerr, uplims=True, label='uplims=True')
plt.errorbar(x, y + 1, yerr=yerr, uplims=True, lolims=True,
label='uplims=True, lolims=True')
upperlimits = [True, False] * 5
lowerlimits = [False, True] * 5
plt.errorbar(x, y, yerr=yerr, uplims=upperlimits, lolims=lowerlimits,
label='subsets of uplims and lolims')
plt.legend(loc='lower right')
plt.tight_layout() # <- add this
但是,为了保持一致性,您可以调整图形的大小以避免图例重叠。
对于这个例子,它将是:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(7,5)) # <- add a figsize
x = np.arange(10)
y = 2.5 * np.sin(x / 20 * np.pi)
yerr = np.linspace(0.05, 0.2, 10)
plt.errorbar(x, y + 3, yerr=yerr, label='both limits (default)')
plt.errorbar(x, y + 2, yerr=yerr, uplims=True, label='uplims=True')
plt.errorbar(x, y + 1, yerr=yerr, uplims=True, lolims=True,
label='uplims=True, lolims=True')
upperlimits = [True, False] * 5
lowerlimits = [False, True] * 5
plt.errorbar(x, y, yerr=yerr, uplims=upperlimits, lolims=lowerlimits,
label='subsets of uplims and lolims')
plt.legend(loc='lower right')
【讨论】:
以上是关于情节图例掩盖了图中的情节线的主要内容,如果未能解决你的问题,请参考以下文章