问题描述
我正在尝试并排生成3个箱形图,每个箱形图具有不同的颜色。
下面的代码显示了我的尝试,但是我遇到了这种异常的“索引不足”错误。
似乎第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.,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,['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.,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,['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或更高的索引将超出索引范围。