プロット図を縮小して空きを作る(応用)

図の右側に空きを作り、そこに箱髭図の各値(中央値、箱の上端、箱の下端、髭の上端、髭の下端、外れ値)を表示する。

#!/usr/bin/env python


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)])    
    
    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(1.2, 0.1 , txt, fontsize=12, transform=ax.transAxes)
    fig.subplots_adjust(right=0.5)

    plt.savefig('test.png')


if __name__=="__main__":
    plot()