rob*_*ntw 161 python matplotlib
我正在努力处理matplotlib中的情节边距.我使用下面的代码生成我的图表:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Run Code Online (Sandbox Code Playgroud)
但是,我得到了一个输出数字,在图的两侧有很多空白区域.我搜索了谷歌并阅读matplotlib文档,但我似乎无法找到如何减少这一点.
Joe*_*ton 226
自动执行此操作的一种方法是使用bbox_inches='tight'
kwarg plt.savefig
.
例如
import matplotlib.pyplot as plt
import numpy as np
data = np.arange(3000).reshape((100,30))
plt.imshow(data)
plt.savefig('test.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用 fig.tight_layout()
import matplotlib.pyplot as plt
import numpy as np
xs = np.linspace(0, 1, 20); ys = np.sin(xs)
fig = plt.figure()
axes = fig.add_subplot(1,1,1)
axes.plot(xs, ys)
# This should be called after all axes have been added
fig.tight_layout()
fig.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)
Dav*_*veP 132
您可以使用subplots_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)
Run Code Online (Sandbox Code Playgroud)
这将适用于屏幕上的图形并保存到文件中,即使您在一个图形上没有多个图形,它也是正确的调用功能.
数字是图形尺寸的分数,需要调整以允许图形标签.
小智 52
所有你需要的是
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
输出之前.
除了缩小边距外,这还可以将任何子图之间的空间紧密分组:
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()
Run Code Online (Sandbox Code Playgroud)
小智 11
有时,plt.tight_layout()
没有给我最好的视图或我想要的视图。那么为什么不先用任意边距进行绘图,然后在绘图后固定边距呢?因为我们从那里得到了很好的 WYSIWYG。
import matplotlib.pyplot as plt
fig,ax = plt.subplots(figsize=(8,8))
plt.plot([2,5,7,8,5,3,5,7,])
plt.show()
Run Code Online (Sandbox Code Playgroud)
然后将设置粘贴到边距功能中以使其永久化:
fig,ax = plt.subplots(figsize=(8,8))
plt.plot([2,5,7,8,5,3,5,7,])
fig.subplots_adjust(
top=0.981,
bottom=0.049,
left=0.042,
right=0.981,
hspace=0.2,
wspace=0.2
)
plt.show()
Run Code Online (Sandbox Code Playgroud)
小智 8
如果有人想知道如何在应用plt.tight_layout()
或之后去除其余的白边fig.tight_layout()
:使用参数pad
(1.08
默认情况下),您可以使其更紧密:“图形边缘和边缘之间的填充子图,作为字体大小的一小部分。” 所以例如
plt.tight_layout(pad=0.05)
Run Code Online (Sandbox Code Playgroud)
将其减少到很小的幅度。Putting0
对我不起作用,因为它也会使子图的框被切掉一点。
小智 7
只要使用ax = fig.add_axes([left, bottom, width, height])
,如果你想图布局的精确控制.例如.
left = 0.05
bottom = 0.05
width = 0.9
height = 0.9
ax = fig.add_axes([left, bottom, width, height])
Run Code Online (Sandbox Code Playgroud)
对于最新的 matplotlib 版本,您可能想尝试Constrained Layout:
constrained_layout自动调整子图和装饰(例如图例和颜色条),以便它们适合图形窗口,同时仍然尽可能保留用户请求的逻辑布局。
constrained_layout与ight_layout类似,但使用约束求解器来确定允许它们适合的轴的大小。
在将任何轴添加到图形之前,需要激活constrained_layout 。
可惜熊猫处理不好......
小智 5
plt.savefig("circle.png", bbox_inches='tight',pad_inches=-1)
Run Code Online (Sandbox Code Playgroud)
受上述 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)
Run Code Online (Sandbox Code Playgroud)
其中 figsize 是您使用的元组 fig = pyplot.figure(figsize=...)
归档时间: |
|
查看次数: |
189677 次 |
最近记录: |