Matplotlib axes.legend更改图像大小(图像长宽比?)

时间:2018-10-31 10:20:15

标签: python-3.x matplotlib legend axes

这个问题很可能与我先前在重构链接到here的某些代码(重新使用matplotlib axes对象)时出现的问题有关。该问题描述了使用imshow会调整image.aspect参数的问题。

我现在正在解决一个产生类似效果的问题,但是我无法通过强制将image.aspect参数设置为auto来解决该问题,这是我的第一个想法,因为它似乎正在以某种方式进行调整。我也找不到任何在here中找到的基础文档。

以下是图片,说明了问题(模糊的图例条目):

预期的行为(图例条目的数量有限) enter image description here

异常行为(大量图例条目) enter image description here

针对上述行为的 MVCE (带有完全无意义的数据)在下面列出,其中,可以通过切换{{1 }}行到50。

for i in range(1,10):

我希望获得有关我这次正在使用的参数或设置的提示。

1 个答案:

答案 0 :(得分:1)

这里#!/bin/bash set -e agent_runner() { while : do if [ ! -f "/proc/$(cat /tmp/agent.pid)/status" ] then curl $JNLP_AGENT_DOWNLOAD_URL -o agent.jar java \ -Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=300 \ -Dhttps.protocols=TLSv1.2 \ -jar agent.jar \ -jnlpUrl $JNLP_AGENT_URL \ -secret $JENKINS_SECRET \ -workDir "$JENKINS_WORKDIR" & echo $! > /tmp/agent.pid else : fi sleep 10 done } while : do if [ cat < /dev/tcp/"$TARGET" ]; then echo "Starting Agent" agent_runner else echo "Jenkins master is offline, waiting...." fi sleep 10 done 试图使每个绘制的艺术家都适应尽可能少的填充。当图例条目的数量很大时,这会产生一些不良结果。

在matplotlib版本> 3中,艺术家具有属性tight_layoutdocs for tight_layout),您可以将其设置为True或False,以将set_in_layout为叫。因此,您可以将tight_layout修改为类似于以下内容的

__init__

一个替代方法(但不理想)是删除def __init__(self, master): self.fig = figure.Figure(figsize=(12,6)) self.fig.set_tight_layout(True) self.axes = self.fig.add_subplot(111) self.axes.axis('off') self.canvas = FigureCanvasTkAgg(self.fig, master=master) self.canvas.get_tk_widget().pack(fill=tk.BOTH, expand=tk.YES) self.canvas.draw() self.data = [] # Adjust the upper value to 10 or 50 for i in range(1,50): self.axes.plot(range(0,100),numpy.random.randint(1,100,100), label=str(i)) self.leg = self.axes.legend() self.leg.set_in_layout(False) # set to False so it's not used in tight_layout calculation! 并使用self.fig.subplots_adjust()自己调整空白,但是这可能需要一些参数的手动调整才能获得所需的结果。 / p>