码迷,mamicode.com
首页 > 其他好文 > 详细

matplotlib basic and boxplot

时间:2015-09-29 18:39:52      阅读:476      评论:0      收藏:0      [点我收藏+]

标签:

============================================
matplotlib 绘图基础
============================================
绘图: matplotlib核心剖析
http://www.cnblogs.com/vamei/archive/2013/01/30/2879700.html

Python图表绘制:matplotlib绘图库入门
http://www.cnblogs.com/wei-li/archive/2012/05/23/2506940.html

Basic Use of Matplotlib
这个文章比较多地讲述了marker style和线型设置
http://pythonshell.github.io/python/2013/11/05/Basic-Use-of-Matplotlib/

matplotlib-绘制精美的图表 (HYRY Studio 出品)
http://old.sebug.net/paper/books/scipydoc/matplotlib_intro.html

坐标系的种类:
axis coords (0,0 is lower-left and 1,1 is upper-right)
data coords, data 值的坐标系
figure coords,   
 
============================================
boxplot 绘图
============================================
理解统计学上的boxplot
http://bagrow.com/dsv/LEC07_notes_2014-02-04.html
http://stackoverflow.com/questions/17725927/boxplots-in-matplotlib-markers-and-outliers
 
理解matplotlib的boxplot
http://blog.bharatbhole.com/creating-boxplots-with-matplotlib/
这篇文章对我的帮助太大了, 它以step by step的方式, 告诉我们如何调教matplotlib绘制boxplot图.


============================================
我的笔记
============================================
matplotlib中boxplot常用的术语:
    whiskers, 是指从box 到error bar之间的竖线
    fliers, 是指error bar线之外的离散点. 维基上的叫法是 Outliers
    caps, 是指error bar横线
    boxes, Q1 和 Q3组成的box, 即25分位和75分位.
    medians, 是中位值的横线.
    means, 是avg的横线.

boxplot() 函数参数:
  参数x: data的输入, 格式是: 由vector组成的一个list
  参数whis: 用来确定 error bar的位置,  上面的那条error bar的位置等于: Q3 + whis*IQR, 下面的那条error bar的位置等于 Q1-whis*IQR, 其中IQR = interquartile range 即 Q3-Q1, whis缺省值为1.5.
  boxplot() 函数还可针对箱线图上每个绘图元素指定的绘图风格, 这些参数有: boxprops,flierprops, medianprops, meanprops,capprops,whiskerprops属性.
    每个绘图风格属性都是dict对象, 下面是一个比较完整属性设定,
    dict(linestyle=‘solid‘, color=‘blue‘, linewidth=1, marker=‘o‘, markerfacecolor=‘red‘, markeredgecolor=‘black‘, markeredgewidth=3, markersize=12)

如果boxplot()函数不能满足需要的话, 还可以做更多的定制化, 手法是: 设置boxplot()函数的返回对象, 下面以bp作为boxplot()返回对象.
bp.bxpstats属性包含下面几个子属性.
    med属性: 中位值.
    q1: box的下边界, 即25分位值.
    q3: box的上边界, 即75分位值.
    whislo: 下面的那条error bar值.
    whishi: 上面的那条error bar值.
bp的其他重要属性还有:
    boxes, 是25分位值和75分位值构成的box, 每个box是一个Line2D对象, 注意是Line2D对象
    medians, 是中位值的横线, 每个median是一个Line2D对象
    whiskers, 是指从box 到error bar之间的竖线. 每个whisker是一个Line2D对象
    fliers, 是指error bar线之外的离散点. 每个flier是一个Line2D对象
    caps, 是指error bar横线. 每个cap是一个Line2D对象
    means, 是avg的横线, 每个mean是一个Line2D对象
    一旦能访问到这些Line2D对象, 就可以做更多的定制化了, 比如设置线性/颜色等, 因为有了位置信息, 甚至可以派生出其他Line2D对象.
                                  
============================================
一个示例
============================================
下面代码是一个定制的boxplot, 定制点有:
1. 绿色的 avg line
2. 需要从最大值连一条线到box顶, 需要从最小值连一条线到box底
3. 画三条水平虚线, 分别是target/UCL/LCL

## numpy is used for creating fake data
import numpy as np
import matplotlib as mpl

## agg backend is used to create plot as a .png file
#mpl.use(‘agg‘)

import matplotlib.pyplot as plt

## 初始化raw data以及其他信息
collectn_list = []  # raw data
#xtick_labels = [‘Sample%d‘%i for i in range(len(collectn_list))]
#y_label =‘y_label‘
#title=‘title‘
#target = 80.0
#ucl=110.0
#lcl=40.0
 
if not collectn_list:
    np.random.seed(10)
    collectn_1 = np.random.normal(100, 10, 20)
    collectn_2 = np.random.normal(80, 30, 20)
    collectn_3 = np.random.normal(90, 20, 20)
    collectn_4 = np.random.normal(70, 25, 20)
    ## combine these different collections into a list
    collectn_list =[collectn_1,collectn_2,collectn_3,collectn_4]
    
    xtick_labels = [Sample%d%i for i in range(len(collectn_list))]
    y_label =y_label
    title=title
    target = 80.0
    ucl=110.0
    lcl=40.0    

 
data_to_plot = collectn_list

# Create a figure instance
fig = plt.figure(1, figsize=(9, 6))
ax = fig.add_subplot(1,1,1)

#meanprops=dict(linestyle=‘solid‘, color=‘blue‘, linewidth=1, marker=‘o‘, markerfacecolor=‘red‘, markeredgecolor=‘black‘, markeredgewidth=3, markersize=12)

# grid on
ax.grid(True)

# avg line is in green
meanprops=dict(linestyle=solid, color=green)

# hide the default median line
medianprops=dict(linestyle=solid, color=white)

# Create the boxplot
bp = ax.boxplot(data_to_plot, meanline=True, showmeans=True, meanprops=meanprops, medianprops=medianprops, showcaps=False)

## extra line from box top to max point, line from box bottom to min point
# 注意几个坐标点的求值
for i, collectn in enumerate(collectn_list):
    percentile_25= np.percentile(collectn, 25, interpolation=blinear)
    percentile_75= np.percentile(collectn, 75, interpolation=blinear)
    y_max= max(collectn)
    y_min= min(collectn)
    medians_org = bp[medians][i]
    medians_org_x=medians_org.get_xdata() # array([ 0.8875,  1.1125])   
    center_x = medians_org_x[0]+(medians_org_x[1]-medians_org_x[0])/2.0
    ax.plot([center_x,center_x], [y_min,percentile_25], color=blue)   
    ax.plot([center_x,center_x], [percentile_75,y_max], color=blue)   

 

ax.set_xticklabels(xtick_labels)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()   
ax.set_ylabel(y_label)    
ax.set_title(title)

## add target/UCL/LCL dash line
# 注意横线的坐标求值, 和文本的坐标的求值
ax.plot([0,len(collectn_list)+0.5],[target,target], linestyle=--, color=blue, linewidth=1)     
ax.text(len(collectn_list)+0.5,target,"Tgt %.2f"%target,fontsize=10,horizontalalignment=right)
ax.plot([0,len(collectn_list)+0.5],[ucl,ucl], linestyle=--, color=blue,  linewidth=1)     
ax.text(len(collectn_list)+0.5,ucl,"UCL %.2f"%ucl,fontsize=10,horizontalalignment=right)
ax.plot([0,len(collectn_list)+0.5],[lcl,lcl], linestyle=--, color=blue,  linewidth=1)    
ax.text(len(collectn_list)+0.5,lcl,"LCL %.2f"%lcl,fontsize=10,horizontalalignment=right)
    
fig.show()

 


 

matplotlib basic and boxplot

标签:

原文地址:http://www.cnblogs.com/harrychinese/p/matplotlib_basic_and_boxplot.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!