【问题标题】:Resize a figure automatically in matplotlib在 matplotlib 中自动调整图形大小
【发布时间】:2010-11-19 06:03:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    使用 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)
    

    ...不过,仅在保存图像时有效,不显示它们。

    【讨论】:

    • fig.add_subplot(111) 表示什么?我的意思是方括号内的数字 ((111))
    • 我的回答 (stackoverflow.com/a/10448306/1273751) 用于显示和保存
    • dpi=100 有什么作用?
    【解决方案2】:

    调用 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')
    

    即使只是为了显示而不是保存也可以使用

    【讨论】:

      【解决方案3】:

      另一种方法是使用matplotlib的tight_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()
      

      【讨论】:

        【解决方案4】:

        你可以尝试使用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()
        

        【讨论】:

          【解决方案5】:

          你的意思是改变图像的大小还是在情节中可见的区域?

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

          也看看这个question

          【讨论】:

          • 我的意思是 Figure 对象的尺寸。即裁剪图形以适合包含的图。可能必须先提供宽度或高度,然后再计算另一个。
          • 我认为正确的命令是.set_size_inches 没有fig
          【解决方案6】:

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

          ax.autoscale(enable=True) 
          

          【讨论】:

          • 嗯,enable=True 已经是默认值了……
          猜你喜欢
          • 2023-03-21
          • 2021-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-25
          • 2012-10-23
          • 1970-01-01
          • 2015-04-01
          相关资源
          最近更新 更多