如何从图像中删除垂直空白区域

时间:2017-11-03 17:56:10

标签: python python-2.7 matplotlib plot

我正在尝试找到一种方法,用matplotlib生成并保存的图形中删除垂直空白区域。所以,基本上是轴上方和下方的白色空间。

我的用例中的requiremens如下:

  • y轴可能具有应保留的自定义缩放
  • 图上方(外侧)可能有一个不会被裁剪的图例
  • x轴和y轴确实有不会被裁剪的标签
  • 只能移除垂直白色空间,而不是水平。否则,这将导致x轴伸长。

以下命令非常接近并删除了垂直空白区域,但它也删除了水平空白区域:

myFigure.savefig(myImagePath, bbox_inches='tight')

最佳解决方案是将bbox_inches='tight'的算法仅应用于绘图的y轴...

2 个答案:

答案 0 :(得分:1)

如评论中所述,您通常会设置数字大小和子情节,以便在选择方向上没有空格。如果y轴确实具有需要保留的给定尺寸,则可以先计算其长度,然后调整图形尺寸和子图参数,使轴长保持不变。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,6), dpi=50)
ax.plot([1,2])
ax.set_ylabel("ylabel")
ax.set_xlabel("xlabel")

### 1. Original image
ax.set_title("original")
plt.savefig("fsi01.png", facecolor="#edf9f9")
### 2. tight bbox 
ax.set_title('bbox_inches="tight"')
plt.savefig("fsi02.png", facecolor="#edf9f9", bbox_inches="tight")

### 3. Only vertical adjustent
axes_height = fig.get_size_inches()[1]*(fig.subplotpars.top-fig.subplotpars.bottom)

top = 0.94; bottom=0.09
fig.subplots_adjust(top=top,bottom=bottom)
fig.set_size_inches((fig.get_size_inches()[0],axes_height/(top-bottom))) 

ax.set_title('only vertical adjust')
plt.savefig("fsi03.png", facecolor="#edf9f9")

plt.show()

enter image description here enter image description here enter image description here

当然,值top = 0.94; bottom=0.09需要在每种情况下单独确定。

答案 1 :(得分:0)

你想使用自动缩放(假设你使用pyplot作为plt)

plt.autoscale(enable=True, axis='y', tight=True)