ChatGPT解决这个技术问题 Extra ChatGPT

如何使用子图更改图形大小?

如何增加 this figure 的图形大小?这什么都不做:

fig.figsize(15, 15)

M
Mateen Ulhaq

在图形对象上使用它:

fig.set_figheight(15)
fig.set_figwidth(15)

或者,当使用 .subplots() 创建新图窗时,指定 figsize=

fig, axs = plt.subplots(2, 2, figsize=(15, 15))

还有fig.set_size_inches一起设置高度和宽度
这不起作用,您可以将高度设置为任何您想要的,但它永远不会大于您的显示器。
这与您的显示器无关。如果你输出到png怎么办?你是说它永远不能大于屏幕分辨率吗?它以英寸为单位的大小与确定以像素为单位的大小的 dpi 相结合。
在对 subplots() 的调用中包含 figsize 似乎不起作用。然而,调用 f.set_figheight 确实有效。
@BenButterworth,它属于 **fig_kw 部分,传递给 pyplot.figure
t
taras

或者,使用 figsize 参数创建一个 figure() 对象,然后使用 add_subplot 添加您的子图。例如

import matplotlib.pyplot as plt
import numpy as np

f = plt.figure(figsize=(10,3))
ax = f.add_subplot(121)
ax2 = f.add_subplot(122)
x = np.linspace(0,4,1000)
ax.plot(x, np.sin(x))
ax2.plot(x, np.cos(x), 'r:')

https://i.stack.imgur.com/esDlK.png

这种方法的好处是语法更接近 subplot() 而不是 subplots() 的调用。例如,subplots 似乎不支持使用 GridSpec 来控制 subplots 的间距,但 subplot()add_subplot() 都支持。


是否有可能分别将“大小”添加到 ax 和 ax2 ?
如果我理解正确,您想设置两个轴的相对大小?在这种情况下,我认为您正在寻找这个问题:stackoverflow.com/questions/10388462/…
图形大小有限制吗?我使用了相同的方法,但我的 29*5 高度的身材看起来与 29*10 高度的身材相同。
不应该,但是 matplotlib 中的某些东西(例如 imshow)会自动缩放和限制纵横比。如果在 jupyter lab / notebook 中,它也会缩小以适合笔记本。
嗯,也许......因为宽度会改变,但高度不会:(
A
Aroc

除了前面的答案之外,这里还有一个选项可以通过 gridspec_kw 分别设置图形的大小和图形内的子图的大小:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

#generate random data
x,y=range(100), range(10)
z=np.random.random((len(x),len(y)))
Y=[z[i].sum() for i in range(len(x))]
z=pd.DataFrame(z).unstack().reset_index()

#Plot data
fig, axs = plt.subplots(2,1,figsize=(16,9), gridspec_kw={'height_ratios': [1, 2]})
axs[0].plot(Y)
axs[1].scatter(z['level_1'], z['level_0'],c=z[0])

https://i.stack.imgur.com/GHOWE.png


A
Arjun Bhaybhang

您可以使用 plt.figure(figsize = (16,8)) 更改单个图和最多两个子图的图形大小。 (figsize 中的参数可以修改图形大小)

要更改更多子图的图形大小,您可以在创建子图时使用 plt.subplots(2,2,figsize=(10,10))


Y
YScharf

用于在 for loop 中绘制 subplots,这有时很有用:用于从 multivariate numpy array(二维)的直方图的多个子图的 matplotlib 图的示例代码。

plt.figure(figsize=(16, 8)) 
for i in range(1, 7):
    plt.subplot(2, 3, i)
    plt.title('Histogram of {}'.format(str(i)))
    plt.hist(x[:,i-1], bins=60)

h
harsh jaiswal
   from matplotlib import pyplot as plt
   lis=[img,gaussian_img,gaussian_img_8bit]
   f,axs=plt.subplots(3,1,figsize=(25,25)) #ROW,COLUMN
   axs[0].imshow(lis[0])
   axs[1].imshow(lis[1])
   axs[2].imshow(lis[2])

这个问题有五个现有的答案,包括一个获得最高票数、接受了超过 900 票的答案 (!!!)。你确定你的解决方案还没有给出吗?如果不是,您为什么认为您的方法改进了已通过社区验证的现有提案?在 Stack Overflow 上提供解释总是有用的,但在问题已得到解决且令 OP 和社区都满意的情况下尤为重要。通过解释您的答案的不同之处以及何时可能更受欢迎,来帮助读者。