天天看点

DAY17 Python做boxplot图常见问题及解决方案

终于做出了想要的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为分辨率