【问题标题】:How do I change the figure size with subplots?如何使用子图更改图形大小?
【发布时间】:2013-01-24 02:39:16
【问题描述】:

我在 Matplotlib 网站上遇到了this example。我想知道是否可以增加图形大小。

我试过了

f.figsize(15,15)

但它什么也没做。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    如果您已经拥有图形对象,请使用:

    f.set_figheight(15)
    f.set_figwidth(15)
    

    但是,如果您使用 .subplots() 命令(如您展示的示例中)创建一个新图形,您也可以使用:

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

    【讨论】:

    • 还有fig.set_size_inches一起设置高度和宽度
    • 这个不行,你可以随意设置高度,但绝对不会比你的显示器大。
    • 这与您的显示器无关。如果你输出到png怎么办?你是说它永远不能大于屏幕分辨率吗?它是以英寸为单位的大小与以像素为单位确定大小的 dpi 的组合。
    • 在对 subplots() 的调用中包含 figsize 似乎不起作用。然而,调用 f.set_figheight 确实有效。
    • @BenButterworth,它属于**fig_kw 部分,被传递给pyplot.figure
    【解决方案2】:

    或者,使用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:')
    

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

    【讨论】:

    • 是否有可能将“大小”分别添加到 ax 和 ax2 中?
    • 如果我理解正确你想设置两个轴的相对大小?在这种情况下,我认为您正在寻找这个问题:stackoverflow.com/questions/10388462/…
    【解决方案3】:

    除了前面的答案,这里有一个选项可以通过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])
    

    结果如下图:

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        用于在 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)
        

        【讨论】:

          猜你喜欢
          • 2014-11-27
          • 1970-01-01
          • 2015-04-15
          • 1970-01-01
          相关资源
          最近更新 更多