我希望在活动情节期间完全消除我的轴周围的空白区域(而不是像其他人要求的那样save_fig)。
在这里,我们无法使用bbox_inches='tight'
。我可以使用tight_layout(pad = 0)。
当轴打开时,它工作正常,它显示所有刻度和x-y标签。
但是,在某些情况下,我将轴设置为关闭。我期望看到内容扩展以填充轴所在的空白区域。但是,这不起作用。它仍然保持填充,因为仍然有x-y标签和轴。
如何删除隐形轴对象的空白区域?
修改
我知道我可以使用ax.set_yticks([])
和ax.set_xticks([])
将其关闭。但这很笨拙,我必须在清除之前记住蜱虫。如果我删除 - 然后添加那些刻度。刻度线不能再自动更新。
我想知道有没有更直接的方法呢?
即使删除了所有刻度,我们仍然可以看到边界间距很小。如果有人可以找到一种方法来删除它。太棒了。
我还想保留标题,如果有的话。因此,硬编码的ax.set_position([0,0,1,x])
对于这种用法并不是很好。当有标题时我们仍然可以尝试获得顶部间距,但如果有人可以提供更直接/简单的方法来处理这个问题,那么它将是首选。
示例代码:
def demo_tight_layout(w=10, h=6, axisoff=False, removeticks=False):
fig,ax = plt.subplots()
fig.set_facecolor((0.8, 0.8, 0.8))
rect = patches.Rectangle((-w/2, -h/2), w, h, color='#00ffff', alpha=0.5)
ax.add_patch(rect)
ax.plot([-w/2,w/2], [-h/2,h/2])
ax.plot([-w/2,w/2], [h/2,-h/2])
ax.set_ylabel("ylabel")
ax.margins(0)
_texts = []
if axisoff:
ax.set_axis_off()
_texts.append("axisoff")
if removeticks:
ax.set_xticks([])
ax.set_yticks([])
ax.set_ylabel("")
_texts.append("removeticks")
fig.text(0.5, 0.6, " ".join(_texts))
fig.tight_layout(pad=0)
plt.show()
return fig, ax, text
答案 0 :(得分:1)
您可以根据是否关闭轴来调整子图参数。
import matplotlib.pyplot as plt
from matplotlib import patches
def demo_tight_layout(w=10, h=6, axisoff=False):
fig,ax = plt.subplots()
fig.set_facecolor((0.8, 0.8, 0.8))
rect = patches.Rectangle((-w/2, -h/2), w, h, color='#00ffff', alpha=0.5)
ax.add_patch(rect)
ax.plot([-w/2,w/2], [-h/2,h/2])
ax.plot([-w/2,w/2], [h/2,-h/2])
ax.set_ylabel("ylabel")
ax.margins(0)
_texts = []
fig.tight_layout()
if axisoff:
ax.set_axis_off()
_texts.append("axisoff")
params = dict(bottom=0, left=0, right=1)
if ax.get_title() == "":
params.update(top=1)
fig.subplots_adjust(**params)
fig.text(0.5, 0.6, " ".join(_texts))
plt.show()
现在demo_tight_layout(axisoff=True)
生成
和demo_tight_layout(axisoff=False)
生成
答案 1 :(得分:0)
您需要设置轴位置以填充图形。如果您使用
创建图形和绘图import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca()
ax.plot(some_x_data, some_y_data)
您需要添加以下行以使用轴填充图形:
ax.set_position([0, 0, 1, 1], which='both')
这将按以下方式设置相对于图形尺寸的轴位置:
[left, bottom, width, height]
如上所示,要完全填充数字,请使用[0, 0, 1, 1]
。
所以拿你的代码,它应该是这样的(使用fill_figure
bool来检查):
def demo_tight_layout(w=10, h=6, axisoff=False, removeticks=False, fill_figure=False):
fig,ax = plt.subplots()
fig.set_facecolor((0.8, 0.8, 0.8))
rect = patches.Rectangle((-w/2, -h/2), w, h, color='#00ffff', alpha=0.5)
ax.add_patch(rect)
ax.plot([-w/2,w/2], [-h/2,h/2])
ax.plot([-w/2,w/2], [h/2,-h/2])
ax.set_ylabel("ylabel")
ax.margins(0)
_texts = []
if axisoff:
ax.set_axis_off()
_texts.append("axisoff")
if removeticks:
ax.set_xticks([])
ax.set_yticks([])
ax.set_ylabel("")
_texts.append("removeticks")
fig.text(0.5, 0.6, " ".join(_texts))
fig.tight_layout(pad=0)
if fill_figure:
ax.set_position([0, 0, 1, 1], which='both')
plt.show()
return fig, ax, text
ax.set_position
需要在fig.tight_layout
之后。
如果需要图形标题,则没有直接的方法可以做到。不幸的是,这是不可避免的。您需要手动调整height
参数,以使标题适合图中,例如:
ax.set_position([0, 0, 1, .9], which='both')