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

Python 如何从图像中删除垂直空白,python,python-2.7,matplotlib,plot,Python,Python 2.7,Matplotlib,Plot,我试图找到一种方法,从使用matplotlib生成和保存的图形中删除垂直空白。因此,基本上是轴上方和下方的空白 我的用例中的要求如下: y轴可能具有定制的缩放比例,应予以保留 图形上方(外部)可能有一个图例,不得裁剪 x轴和y轴的标签也不应裁剪 只能删除垂直空白,而不能删除水平空白。否则,这将导致x轴拉长 以下命令非常接近并删除了垂直空白,但也删除了水平空白: myFigure.savefig(myImagePath, bbox_inches='tight') 最佳解决方案是将bbox\u

我试图找到一种方法,从使用
matplotlib
生成和保存的图形中删除垂直空白。因此,基本上是轴上方和下方的空白

我的用例中的要求如下:

  • y轴可能具有定制的缩放比例,应予以保留
  • 图形上方(外部)可能有一个图例,不得裁剪
  • x轴和y轴的标签也不应裁剪
  • 只能删除垂直空白,而不能删除水平空白。否则,这将导致x轴拉长
以下命令非常接近并删除了垂直空白,但也删除了水平空白:

myFigure.savefig(myImagePath, bbox_inches='tight')
最佳解决方案是将
bbox\u inches='tight'
算法仅应用于绘图的y轴…

您希望使用自动缩放(假设您使用pyplot作为plt)


正如在评论中所说,您通常会设置图形大小和子PlotParams,以便在选择方向上没有空间。如果yaxis确实具有需要保留的给定大小,则可以首先计算其长度,然后调整地物大小和子地块参数,使轴长度保持不变

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()


当然,值
top=0.94;底部=0.09
需要在每种情况下分别确定。

这里的确切要求是什么?前几天我回答了另一个问题,他的答案也可以修改。如果您可以更新您的问题,说明这些问题有多大帮助或没有帮助,那将是很好的。它不就是
plt.subplot\u adjust(top=0.95)
?@ImportanceOfBeingErnest感谢您的链接。第一个对我来说是新的。我去看看。第二个我也找到了,但对我没有帮助。不过,我会再看一次。到目前为止,我尝试过的任何方法都不能满足我更新的问题中提到的至少一个要求。@ImportantanceOfBeingernest下列方法是否可以作为解决方法?首先应用
bbox\u inches='tight'
然后将x轴重置为其原始长度?使用
bbox\u inches='tight'
x轴不会更改其长度,因此无法将其重置为任何值。这个问题实际上要求不要更改图形本身的任何内容,否则您可以简单地设置子地块_调整以使轴适合它。谢谢您的回答。但这将删除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()