箱髭図の値

箱髭図の各値(中央値、箱の上端、箱の下端、髭の上端、髭の下端、外れ値)を取り出す。
下記の例では、図の右側に空きを作るため、空の箱髭図を二つプロットするという姑息な事をしている。

(2012/12/31追記: こちら に、図を縮小して空きを作り、そのスペースに文字列を表示する方法を説明)


import random
import dateutil.parser as parser
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


def plot():
    val = []
    val.append([random.normalvariate(0,100) for j in range(10000)])
    val.append([random.normalvariate(20,50) for j in range(10000)])    
    val.append([])
    val.append([])
    
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)    

    ax.set_ylim([-400,400])
    ax.grid()
    ax.set_xticklabels(["A","B","",""])

    bp = ax.boxplot(val)

    txt = "A info:\n"
    txt += "Median = %.2f\n"%bp["medians"][0].get_ydata()[0]
    txt += "3rd Quartile = %.2f\n"%bp["boxes"][0].get_ydata()[2]
    txt += "1st Quartile = %.2f\n"%bp["boxes"][0].get_ydata()[0]
    txt += "Upper Whisker = %.2f\n"%bp["whiskers"][1].get_ydata()[1]
    txt += "Lower Whisker = %.2f\n"%bp["whiskers"][0].get_ydata()[1]
    txt += "Highest Flier = %.2f\n"%sorted(bp["fliers"][0].get_ydata())[-1]
    txt += "Lowest Flier = %.2f\n"%sorted(bp["fliers"][1].get_ydata())[0]
    txt += "\n"

    txt += "B info:\n"
    txt += "Median = %.2f\n"%bp["medians"][1].get_ydata()[0]
    txt += "3rd Quartile = %.2f\n"%bp["boxes"][1].get_ydata()[2]
    txt += "1st Quartile = %.2f\n"%bp["boxes"][1].get_ydata()[0]
    txt += "Upper Whisker = %.2f\n"%bp["whiskers"][3].get_ydata()[1]
    txt += "Lower Whisker = %.2f\n"%bp["whiskers"][2].get_ydata()[1]
    txt += "Highest Flier = %.2f\n"%sorted(bp["fliers"][2].get_ydata())[-1]
    txt += "Lowest Flier = %.2f\n"%sorted(bp["fliers"][3].get_ydata())[0]
    
    ax.text(3.0, -250 , txt, fontsize=12)

    plt.savefig('test.png')


if __name__=="__main__":
    plot()

※boxplot関数の返り値に関して、より詳しくは http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg25055.htm を参照。