终于做出了想要的boxplot图
1)matplotlib API https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html#module-matplotlib.pyplot
2)解决LInux端没有GUI问题
matplotlib.use('Agg')
import matplotlib.pyplot as plt
#而且必须添加在import matplotlib.pyplot之前,否则无效
3)解决list长度不一致问题
pd.Series(np.array(list))
4)设置颜色和透明度
for i in range(len(bp['boxes'])):
setp(bp['boxes'][i], color=color[i]) # 设置盒体的颜色
setp(bp['caps'][i*2], color=color[i]) # 设置上边缘颜色
setp(bp['caps'][i*2+1], color=color[i]) # 设置下边缘颜色
setp(bp['whiskers'][i*2], color=color[i]) # 设置上面的须的颜色
setp(bp['whiskers'][i*2], linestyle='-') # 设置上面的须为实线
setp(bp['whiskers'][i*2+1], color=color[i]) # 设置下面的须的颜色
setp(bp['whiskers'][i*2+1], linestyle='-') # 设置下面的须为实线
setp(bp['medians'][i], color=color_palette[i]) # 设置中位线的颜色
bp['boxes'][i].set_alpha(0.5) # 设置盒体透明度
5)按列表顺序(而非字典序)生成柱体
plt.xticks(np.arange(len(kinds))+1, kinds) # 如果没有+1标签会与柱体错开一位,原因不明
6)将纵轴转化为百分数
from matplotlib.ticker import FuncFormatter
def to_percent(temp, position):
return '%1.0f' % (100 * temp) + '%'
plt.gca().yaxis.set_major_formatter(FuncFormatter(to_percent))
7)网格线
plt.grid(b=None) # 不显示网格线
8)设置边距
plt.subplots_adjust(left=0.15, bottom=0.4, right=0.95, top=0.95) # 边距
9)保存结果为pdf
plt.savefig('result.pdf', dpi=1000) # dpi为分辨率