使用 Python matplotlib 并排绘制 3 个箱形图时出现索引错误

Out of Index Error when plotting 3 boxplots side-by-side with Python matplotlib

我正在尝试并排生成 3 个箱线图,每个都有不同的颜色。 下面的代码显示了我的尝试,但我收到了这个不寻常的 'out of index' 错误。 似乎第 3 个箱线图的 fliers 的索引指定错误,但我不确定如何修复它,因为我正在尝试并排绘制 3 个箱线图 谁能告诉我如何避免这个错误?

谢谢,

from matplotlib.pyplot import (plot, savefig, xlim, figure,
                              ylim, legend, boxplot, setp,
                              axes, xlabel, ylabel, xticks,
                              axvline)

success_list_data=[[1.,2.,3.,4.,5.],[1.,2.,3.,4.,5.],[1.,2.,3.,4.,5.]]

# function for setting the colors of the box plots pairs
def setBoxColors(bp):
    setp(bp['boxes'][0], color='red')
    setp(bp['caps'][0], color='red')
    setp(bp['caps'][1], color='red')
    setp(bp['whiskers'][0], color='red')
    setp(bp['whiskers'][1], color='red')
    setp(bp['fliers'][0], color='red')
    setp(bp['fliers'][1], color='red')
    setp(bp['medians'][0], color='red')

    setp(bp['boxes'][1], color='green')
    setp(bp['caps'][2], color='green')
    setp(bp['caps'][3], color='green')
    setp(bp['whiskers'][2], color='green')
    setp(bp['whiskers'][3], color='green')
    setp(bp['fliers'][2], color='green')
    setp(bp['fliers'][3], color='green')
    setp(bp['medians'][1], color='green')
    
    setp(bp['boxes'][2], color='purple')
    setp(bp['caps'][4], color='purple')
    setp(bp['caps'][5], color='purple')
    setp(bp['whiskers'][4], color='purple')
    setp(bp['whiskers'][5], color='purple')
    setp(bp['fliers'][4], color='purple')
    setp(bp['fliers'][5], color='purple')
    setp(bp['medians'][2], color='purple')

def make_boxplots(success_list_data):

    fig = figure()
    ax = axes()

    bp = boxplot(success_list_data, positions = [1, 2, 3], widths = 0.6)
    setBoxColors(bp)
    
        # label the x-ticks.
    plt.xticks([1, 2, 3], 
               ['Delta','Diag. Normal', 'Laplace'])
    
    # label for the x-axis.
    plt.xlabel('Guide Type')
    # label for the y-axis.
    plt.ylabel('Test Success Rate')

# this generates an error
>>> make_boxplots(success_list_data)
>>> Traceback (most recent call last):

  File "<ipython-input-7-7d712300046b>", line 1, in <module>
    make_boxplots(success_list_data)

  File "<ipython-input-6-16ffa2fcfdd4>", line 37, in make_boxplots
    setBoxColors(bp)

  File "<ipython-input-6-16ffa2fcfdd4>", line 18, in setBoxColors
    setp(bp['fliers'][3], color='green')

IndexError: list index out of range

这是可以正常工作的代码。

from matplotlib.pyplot import (plot, savefig, xlim, figure,
                              ylim, legend, boxplot, setp,
                              axes, xlabel, ylabel, xticks,
                              axvline)
# Need to import matplotlib.pyplot since you are using it below.
import matplotlib.pyplot as plt

success_list_data=[[1.,2.,3.,4.,5.],[1.,2.,3.,4.,5.],[1.,2.,3.,4.,5.]]

# function for setting the colors of the box plots pairs
def setBoxColors(bp):
    setp(bp['boxes'][0], color='red')
    setp(bp['caps'][0], color='red')
    setp(bp['caps'][1], color='red')
    setp(bp['whiskers'][0], color='red')
    setp(bp['whiskers'][1], color='red')
    setp(bp['fliers'][0], color='red')
    setp(bp['fliers'][1], color='red')
    setp(bp['medians'][0], color='red')

    setp(bp['boxes'][1], color='green')
    setp(bp['caps'][2], color='green')
    setp(bp['caps'][3], color='green')
    setp(bp['whiskers'][2], color='green')
    setp(bp['whiskers'][3], color='green')
    setp(bp['fliers'][2], color='green')
    # setp(bp['fliers'][3], color='green')
    setp(bp['medians'][1], color='green')
    
    setp(bp['boxes'][2], color='purple')
    setp(bp['caps'][4], color='purple')
    setp(bp['caps'][5], color='purple')
    setp(bp['whiskers'][4], color='purple')
    setp(bp['whiskers'][5], color='purple')
    # setp(bp['fliers'][4], color='purple')
    # setp(bp['fliers'][5], color='purple')
    setp(bp['medians'][2], color='purple')


def make_boxplots(success_list_data):

    fig = figure()
    ax = axes()

    bp = boxplot(success_list_data, positions = [1, 2, 3], widths = 0.6)
    setBoxColors(bp)
    
        # label the x-ticks.
    plt.xticks([1, 2, 3], 
               ['Delta','Diag. Normal', 'Laplace'])
    
    # label for the x-axis.
    plt.xlabel('Guide Type')
    # label for the y-axis.
    plt.ylabel('Test Success Rate')


make_boxplots(success_list_data)

这是bp['fliers']的输出:

  [<matplotlib.lines.Line2D at 0x7fa8e0d41710>,
   <matplotlib.lines.Line2D at 0x7fa8e0d52a10>,
   <matplotlib.lines.Line2D at 0x7fa8e0d64cd0>]

索引 3 及以上将超出索引范围。