2014-04-26 34 views
4

我正在用下面的代码绘制一个简单的盒子图,但在结果中可以看到一些词被剪切掉了图像。我该如何解决这个问题?正在剪切的文本 - Matplotlib/Python

def generate_data_boxplots(data, ticks, x_axis_label, y_axis_label, file_path): 
    """ 
    Plot multiple data boxplots in parallel 
    :param data : a set of data to be plotted 
    :param x_axis_label : the x axis label of the data 
    :param y_axis_label : the y axis label of the data 
    :param file_path : the path where the output will be save 
    """ 
    plt.figure() 
    bp = plt.boxplot(data, sym='r+') 
    plt.xticks(numpy.arange(1, len(ticks)+1), ticks, rotation=15) 
    plt.xlabel(x_axis_label) 
    plt.ylabel(y_axis_label) 

    # Overplot the sample averages, with horizontal alignment in the center of each box 
    for i in range(len(data)): 
     med = bp['medians'][i] 
     plt.plot([numpy.average(med.get_xdata())], [numpy.average(data[i])], color='w', marker='s', 
       markeredgecolor='k') 
    plt.savefig(file_path + '.png') 
    plt.close() 

enter image description here

enter image description here

回答

3

您可以使用plt.tight_layout(),以帮助减少与文本被切断你有问题。

plt.tight_layout()将调整子图参数以确保所有对象都适合在正确的区域内。

只需在plt.show()之前致电plt.tight_layout()即可生成您的地块。

6

使用fig.tight_layout或将一些其他参数传递给savefig调用。

def generate_data_boxplots(data, ticks, x_axis_label, y_axis_label, file_path): 
    fig, ax = plt.subplots() 
    bp = ax.boxplot(data, sym='r+') 
    plt.xticks(numpy.arange(1, len(ticks)+1), ticks, rotation=15) 
    ax.set_xlabel(x_axis_label) 
    ax.set_ylabel(y_axis_label) 

    # Overplot the sample averages, with horizontal alignment in the center of each box 
    for i in range(len(data)): 
     med = bp['medians'][i] 
     ax.plot([numpy.average(med.get_xdata())], [numpy.average(data[i])], color='w', marker='s', 
       markeredgecolor='k') 
    fig.tight_layout() # <----- this 
    fig.savefig(file_path + '.png') 
    fig.close() 

def generate_data_boxplots(data, ticks, x_axis_label, y_axis_label, file_path): 
    fig, ax = plt.subplots() 
    bp = ax.boxplot(data, sym='r+') 
    plt.xticks(numpy.arange(1, len(ticks)+1), ticks, rotation=15) 
    ax.set_xlabel(x_axis_label) 
    ax.set_ylabel(y_axis_label) 

    # Overplot the sample averages, with horizontal alignment in the center of each box 
    for i in range(len(data)): 
     med = bp['medians'][i] 
     ax.plot([numpy.average(med.get_xdata())], [numpy.average(data[i])], color='w', marker='s', 
       markeredgecolor='k') 
    fig.savefig(file_path + '.png', bbox_inches='tight') # <------ this 
    fig.close()