ChatGPT解决这个技术问题 Extra ChatGPT

How do I change the figure size with subplots?

How do I increase the figure size for this figure? This does nothing:

fig.figsize(15, 15)

M
Mateen Ulhaq

Use this on a figure object:

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

Alternatively, when using .subplots() to create a new figure, specify figsize=:

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

there is also fig.set_size_inches to set height and width together
This doesn't work, you can set the height to whatever you want , but it will never be larger than your monitor.
This doesn't have to do anything with your monitor. What if you output to a png? Are you saying it can never be larger than screen resolution? Its the combination of size in inches with the dpi that determines the size in pixels.
including figsize in the call to subplots() does not seem to work. calling f.set_figheight, however, does work.
@BenButterworth, it falls under the **fig_kw part, which are passed on to pyplot.figure.
t
taras

Alternatively, create a figure() object using the figsize argument and then use add_subplot to add your subplots. E.g.

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

Benefits of this method are that the syntax is closer to calls of subplot() instead of subplots(). E.g. subplots doesn't seem to support using a GridSpec for controlling the spacing of the subplots, but both subplot() and add_subplot() do.


Any possibility to add 'size' to ax and ax2 separately ?
If I understand correctly you want to set the relative size of the two axes? In that case, I think you're looking for this question: stackoverflow.com/questions/10388462/…
Are there any limits on the figure size? I used the same approach, but my figure with 29*5 height looks the same as one with 29*10 height.
Shouldn't be, but some things in matplotlib (e.g. imshow) will autoscale and limit aspect ratios. If in jupyter lab / notebook it also will shrink to fit in the notebook.
Hmm, maybe... Because the width changes, but the height doesn't :(
A
Aroc

In addition to the previous answers, here is an option to set the size of the figure and the size of the subplots within the figure individually by means of 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

You can use plt.figure(figsize = (16,8)) to change figure size of a single plot and with up to two subplots. (arguments inside figsize lets to modify the figure size)

To change figure size of more subplots you can use plt.subplots(2,2,figsize=(10,10)) when creating subplots.


Y
YScharf

For plotting subplots in a for loop which is useful sometimes: Sample code to for a matplotlib plot of multiple subplots of histograms from a multivariate numpy array (2 dimensional).

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

There are five existing answers to this question, including a top-voted, accepted answer with over nine hundred votes (!!!). Are you certain your solution hasn't already been given? If not, why do you believe your approach improves upon the existing proposals, which have been validated by the community? Offering an explanation is always useful on Stack Overflow, but it's especially important where the question has been resolved to the satisfaction of both the OP and the community. Help readers out by explaining what your answer does different and when it might be preferred.