代码之家  ›  专栏  ›  技术社区  ›  PixelPioneer

减少箱线图matplotlib内的空间

  •  2
  • PixelPioneer  · 技术社区  · 6 年前

    我想删除绘图边界内的额外空间

    plt.boxplot(parkingData_agg['occupancy'], 0, 'rs', 0, 0.75)
    plt.tight_layout() # This didn't work. Maybe it's not for the purpose I am thinking it is used for.
    plt.yticks([0],['Average Occupancy per slot'])
    fig = plt.figure(figsize=(5, 1), dpi=5) #Tried to change the figsize but it didn't work
    plt.show()
    

    enter image description here

    所需的图如下图左起第二个图所示 enter image description here

    2 回复  |  直到 6 年前
        1
  •  6
  •   ImportanceOfBeingErnest    6 年前

    代码中的命令顺序有点混乱。

    • 你需要定义一个数字, 之前 打印命令(否则会生成第二个图形)。
    • 你还需要打电话 tight_layout 之后 设置ticklabels,以便可以解释长ticklabel。
    • 要使位置0处的勾号与箱线图的位置匹配,需要将其设置为该位置( pos=[0] )

    这些变化将导致以下图

    import matplotlib.pyplot as plt
    import numpy as np
    data = np.random.rayleigh(scale=7, size=100)
    
    fig = plt.figure(figsize=(5, 2), dpi=100)
    
    plt.boxplot(data, False, sym='rs', vert=False, whis=0.75, positions=[0])
    
    plt.yticks([0],['Average Occupancy per slot'])
    
    plt.tight_layout() 
    plt.show()
    

    enter image description here

    然后您可以更改 widths 匹配所需结果的箱线图,例如。

    plt.boxplot(..., widths=[0.75])
    

    enter image description here

    当然,您可以将绘图放在子图中,而不是让轴填满图形的整个空间,例如:。

    import matplotlib.pyplot as plt
    import numpy as np
    data = np.random.rayleigh(scale=7, size=100)
    
    fig = plt.figure(figsize=(5, 3), dpi=100)
    ax = plt.subplot(3,1,2)
    
    ax.boxplot(data, False, sym='rs', vert=False, whis=0.75, positions=[0], widths=[0.5])
    
    plt.yticks([0],['Average Occupancy per slot'])
    
    plt.tight_layout()
    plt.show()
    

    enter image description here

        2
  •  1
  •   prateek khandelwal    6 年前

    使用子批次\u调整

    fig = plt.figure(figsize=(5, 2))
    axes = fig.add_subplot(1,1,1)
    axes.boxplot(parkingData_agg['occupancy'], 0, 'rs', 0, 0.75)
    plt.subplots_adjust(left=0.1, right=0.9, top=0.6, bottom=0.4)
    
    #plt.boxplot(parkingData_agg['occupancy'], 0, 'rs', 0, 0.75)
    #plt.tight_layout()
    plt.yticks([0],['Average Occupancy per slot'])
    plt.show()