在 matplotlib 中自动调整图形大小

发布于 2024-08-01 15:57:08 字数 130 浏览 3 评论 0原文

有没有办法自动调整图形大小以正确适合 matplotlib/pylab 图像中包含的图?

我正在创建根据所使用的数据纵横比不同的热图(子)图。

我意识到我可以计算纵横比并手动设置它,但肯定有更简单的方法吗?

Is there a way to automatically resize a figure to properly fit contained plots in a matplotlib/pylab image?

I'm creating heatmap (sub)plots that differ in aspect ratio according to the data used.

I realise I could calculate the aspect ratio and manually set it, but surely there's an easier way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

国粹 2024-08-08 15:57:08

也可以将 ax.autoscale 与 ax 对象一起使用

ax.autoscale(enable=True) 

Also possible to use ax.autoscale with ax object

ax.autoscale(enable=True) 
尘世孤行 2024-08-08 15:57:08

使用 bbox_inches='tight'

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)

fig = plt.figure(figsize=(15,5),facecolor='w') 
ax = fig.add_subplot(111)
ax.imshow(X, cmap=cm.jet)

plt.savefig("image.png",bbox_inches='tight',dpi=100)

...仅在保存图像时有效,而不是显示图像。

Use bbox_inches='tight'

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)

fig = plt.figure(figsize=(15,5),facecolor='w') 
ax = fig.add_subplot(111)
ax.imshow(X, cmap=cm.jet)

plt.savefig("image.png",bbox_inches='tight',dpi=100)

...only works when saving images though, not showing them.

趁年轻赶紧闹 2024-08-08 15:57:08

另一种方法是使用 matplotlibight_layout 函数

import matplotlib.pyplot as plt
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1)
data = [0,1,2,3,4]
ax.plot(data)
fig.tight_layout()
fig.show()

Another way of doing this is using the matplotlib tight_layout function

import matplotlib.pyplot as plt
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1)
data = [0,1,2,3,4]
ax.plot(data)
fig.tight_layout()
fig.show()
南风起 2024-08-08 15:57:08

当你调用imshow时只需使用aspect='auto'

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)
plt.imshow(X, aspect='auto')

它就可以工作,即使它只是为了显示而不是保存

just use aspect='auto' when you call imshow

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)
plt.imshow(X, aspect='auto')

it works even if it is just for showing and not saving

悲歌长辞 2024-08-08 15:57:08

您可以尝试使用 axis('scaled')

import matplotlib.pyplot as plt
import numpy

#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]]) 
img2 = numpy.array([[.1,.2],[.3,.4]])

fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen 
plt.show()

you can try using axis('scaled')

import matplotlib.pyplot as plt
import numpy

#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]]) 
img2 = numpy.array([[.1,.2],[.3,.4]])

fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen 
plt.show()
短暂陪伴 2024-08-08 15:57:08

您的意思是更改图像的大小或绘图中可见的区域吗?

可以使用 Figure.set_figsize_inches 设置图形的大小。
另外 SciPy Cookbook 有一个关于更改图像大小的条目,其中包含有关多个图像的部分每图。

另请看看这个问题

Do you mean changing the size of the image or the area that is visable within a plot?

The size of a figure can be set with Figure.set_figsize_inches.
Also the SciPy Cookbook has an entry on changing image size which contains a section about multiple images per figure.

Also take a look at this question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文