簡體   English   中英

使用 Python matplotlib 並排繪制 3 個箱線圖時出現索引錯誤

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

我正在嘗試並排生成 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 及以上的索引將超出索引范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM