Python 减少matplotlib绘图中的左右边距
我正在努力处理matplotlib中的绘图页边距。我已使用以下代码生成图表:Python 减少matplotlib绘图中的左右边距,python,matplotlib,Python,Matplotlib,我正在努力处理matplotlib中的绘图页边距。我已使用以下代码生成图表: plt.imshow(g) c = plt.colorbar() c.set_label("Number of Slabs") plt.savefig("OutputToUse.png") 然而,我得到了一个输出图,图的两边都有很多空白。我搜索了谷歌并阅读了matplotlib文档,但我似乎找不到如何减少这一点。一种自动实现这一点的方法是bbox\u inches='tight'kwarg-to 例如 另一种方法是使
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
然而,我得到了一个输出图,图的两边都有很多空白。我搜索了谷歌并阅读了matplotlib文档,但我似乎找不到如何减少这一点。一种自动实现这一点的方法是
bbox\u inches='tight'
kwarg-to
例如
另一种方法是使用
自动执行此操作的一种方法是使用
bbox\u inches='tight'
kwarg-to
例如
另一种方法是使用
可以使用subplot_adjust()函数调整matplotlib图形周围的间距:
import matplotlib.pyplot as plt
plt.plot(whatever)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
这将适用于屏幕上的图形和保存到文件中的图形,即使一个图形上没有多个绘图,也可以调用此函数
数字是地物尺寸的分数,需要进行调整以允许地物标签。您可以使用子地块调整()函数调整matplotlib地物周围的间距:
import matplotlib.pyplot as plt
plt.plot(whatever)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.savefig("circle.png", bbox_inches='tight',pad_inches=-1)
这将适用于屏幕上的图形和保存到文件中的图形,即使一个图形上没有多个绘图,也可以调用此函数
数字是地物尺寸的分数,需要进行调整以允许地物标签。matplotlibs子地块的问题在于,您输入的值与地物的x和y尺寸有关。此示例用于打印pdf时正确的地物尺寸:
plt.savefig("circle.png", bbox_inches='tight',pad_inches=-1)
为此,我重新计算了绝对值的相对间距,如下所示:
pyplot.subplots_adjust(left = (5/25.4)/figure.xsize, bottom = (4/25.4)/figure.ysize, right = 1 - (1/25.4)/figure.xsize, top = 1 - (3/25.4)/figure.ysize)
对于x维为“figure.xsize”英寸,y维为“figure.ysize”英寸的图形。因此,整个图形的左边缘为5 mm,下边缘为4 mm,右边缘为1 mm,顶部为3 mm。(x/25.4)的转换已经完成,因为我需要将mm转换为in
请注意,x的纯图表大小将是“figure.xsize-左边距-右边距”,y的纯图表大小将是“figure.ysize-下边距-上边距”,单位为英寸
其他狙击手(不确定这些,我只是想提供其他参数)
及
matplotlibs子批次的问题在于,您输入的值与图形的x和y图形大小有关。此示例用于pdf打印的正确图形化: 为此,我重新计算了绝对值的相对间距,如下所示:
pyplot.subplots_adjust(left = (5/25.4)/figure.xsize, bottom = (4/25.4)/figure.ysize, right = 1 - (1/25.4)/figure.xsize, top = 1 - (3/25.4)/figure.ysize)
对于x维为“figure.xsize”英寸,y维为“figure.ysize”英寸的图形。因此,整个图形的左边缘为5 mm,下边缘为4 mm,右边缘为1 mm,顶部为3 mm。(x/25.4)的转换已经完成,因为我需要将mm转换为in
请注意,x的纯图表大小将是“figure.xsize-左边距-右边距”,y的纯图表大小将是“figure.ysize-下边距-上边距”,单位为英寸
其他狙击手(不确定这些,我只是想提供其他参数)
及
你所需要的只是
plt.tight_layout()
在输出之前
除了减少边距外,这还将所有子地块之间的空间紧密分组:
x = [1,2,3]
y = [1,4,9]
import matplotlib.pyplot as plt
fig = plt.figure()
subplot1 = fig.add_subplot(121)
subplot1.plot(x,y)
subplot2 = fig.add_subplot(122)
subplot2.plot(y,x)
fig.tight_layout()
plt.show()
你所需要的只是
plt.tight_layout()
在输出之前
除了减少边距外,这还将所有子地块之间的空间紧密分组:
x = [1,2,3]
y = [1,4,9]
import matplotlib.pyplot as plt
fig = plt.figure()
subplot1 = fig.add_subplot(121)
subplot1.plot(x,y)
subplot2 = fig.add_subplot(122)
subplot2.plot(y,x)
fig.tight_layout()
plt.show()
对我来说,上面的答案不适用于Win7上的
matplotlib.\uu版本=1.4.3
。因此,如果我们只对图像本身感兴趣(即,如果我们不需要注释、轴、记号、标题、ylabel等),那么最好将numpy数组保存为图像,而不是savefig
from pylab import *
ax = subplot(111)
ax.imshow(some_image_numpyarray)
imsave('test.tif', some_image_numpyarray)
# or, if the image came from tiff or png etc
RGBbuffer = ax.get_images()[0].get_array()
imsave('test.tif', RGBbuffer)
另外,使用opencv绘图函数(cv2.line、cv2.polylines),我们可以直接在numpy数组上绘制一些图形 对我来说,上面的答案不适用于Win7上的
matplotlib.\uuuu版本=1.4.3
。因此,如果我们只对图像本身感兴趣(即,如果我们不需要注释、轴、记号、标题、ylabel等),那么最好将numpy数组保存为图像,而不是savefig
from pylab import *
ax = subplot(111)
ax.imshow(some_image_numpyarray)
imsave('test.tif', some_image_numpyarray)
# or, if the image came from tiff or png etc
RGBbuffer = ax.get_images()[0].get_array()
imsave('test.tif', RGBbuffer)
另外,使用opencv绘图函数(cv2.line、cv2.polylines),我们可以直接在numpy数组上绘制一些图形 只需使用
ax=fig.add_轴([左、下、宽、高])
如果要精确控制地物布局。例如
left = 0.05
bottom = 0.05
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
只需使用ax=fig.add_轴([左、下、宽、高]) 如果要精确控制地物布局。例如
left = 0.05
bottom = 0.05
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
受上述Sammys答案的启发:
margins = { # vvv margin in inches
"left" : 1.5 / figsize[0],
"bottom" : 0.8 / figsize[1],
"right" : 1 - 0.3 / figsize[0],
"top" : 1 - 1 / figsize[1]
}
fig.subplots_adjust(**margins)
其中figsize是您在
fig=pyplot.figure(figsize=…)
中使用的元组,其灵感来源于Sammys的上述答案:
margins = { # vvv margin in inches
"left" : 1.5 / figsize[0],
"bottom" : 0.8 / figsize[1],
"right" : 1 - 0.3 / figsize[0],
"top" : 1 - 1 / figsize[1]
}
fig.subplots_adjust(**margins)
其中figsize是您在
fig=pyplot.figure(figsize=…)
中使用的元组,以防有人想知道在应用plt.tight_layout()
或fig.tight_layout()
后如何去除剩余的白边(默认情况下为1.08
),你可以让它更紧:
在图形边缘和子批次边缘之间填充,作为字体大小的一部分
比如说
plt.tight_layout(pad=0.05)
将把它减少到一个很小的幅度。放置
0
对我不起作用,因为它会使子地块的方框也被切掉一点。以防有人想知道在应用plt.tight_layout()
或fig.tight_layout()
:使用参数pad
(默认为1.08
),你可以让它更紧:
在图形边缘和子批次边缘之间填充,作为字体大小的一部分
比如说
plt.tight_layout(pad=0.05)
将把它减少到一个很小的幅度。放置
0
对我不起作用,因为它会使子地块的方框也被切掉一点。对于最新的matplotlib版本,您可能希望