Python:Matplotlib 画柱状图(Code)

转载 2014年05月03日 15:39:04

原文链接:http://blog.csdn.net/ikerpeng/article/details/20523679

参考资料:http://matplotlib.org/gallery.html   matplotlib画廊

有少量修改,如有疑问,请访问原作者!

首先补充一下:两种体系7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑)


在科研的过程中,坐标系中的XY不一定就是等尺度的。例如在声波中对Y轴取对数。肆意我们也必须知道这种坐标系如何画出来的。


 1:对数坐标图

    有3个函数可以实现这种功能,分别是:semilogx(),semilogy(),loglog()。它们分别表示对X轴,Y轴,XY轴取对数。下面在一个2*2的figure里面来比较这四个子图(还有plot())。

[python] 
  1. <span style="font-size:14px;">  1 import numpy as np  
  2.   2 import matplotlib.pyplot as plt  
  3.   3 w=np.linspace(0.1,1000,1000)  
  4.   4 p=np.abs(1/(1+0.1j*w))  
  5.   5   
  6.   6 plt.subplot(221)  
  7.   7 plt.plot(w,p,lw=2)  
  8.   8 plt.xlabel('X')  
  9.   9 plt.ylabel('y')  
  10.  10   
  11.  11   
  12.  12 plt.subplot(222)  
  13.  13 plt.semilogx(w,p,lw=2)  
  14.  14 plt.ylim(0,1.5)  
  15.  15 plt.xlabel('log(X)')  
  16.  16 plt.ylabel('y')  
  17.  17   
  18.  18 plt.subplot(223)  
  19.  19 plt.semilogy(w,p,lw=2)  
  20.  20 plt.ylim(0,1.5)  
  21.  21 plt.xlabel('x')  
  22.  22 plt.xlabel('log(y)')  
  23.  23   
  24.  24 plt.subplot(224)  
  25.  25 plt.loglog(w,p,lw=2)  
  26.  26 plt.ylim(0,1.5)  
  27.  27 plt.xlabel('log(x)')  
  28.  28 plt.xlabel('log(y)')  
  29.  29 plt.show()  
  30. </span>  
如上面的代码所示,对一个低通滤波器函数绘图。得到四个不同坐标尺度的图像。如下图所示:


2,极坐标图像
    极坐标系中的点由一个夹角和一段相对于中心位置的距离来表示。其实在plot()函数里面本来就有一个polar的属性,让他为True就行了。下面绘制一个极坐标图像:

  1.   1 import numpy as np  
  2.   2 import matplotlib.pyplot as plt  
  3.   3   
  4.   4 theta=np.arange(0,2*np.pi,0.02)  
  5.   5   
  6.   6 plt.subplot(121,polar=True)  
  7.   7 plt.plot(theta,2*np.ones_like(theta),lw=2)  
  8.   8 plt.plot(theta,theta/6,'--',lw=2)  
  9.   9   
  10.  10 plt.subplot(122,polar=True)  
  11.  11 plt.plot(theta,np.cos(5*theta),'--',lw=2)  
  12.  12 plt.plot(theta,2*np.cos(4*theta),lw=2)  
  13.  13 plt.rgrids(np.arange(0.5,2,0.5),angle=45)  
  14.  14 plt.thetagrids([0,45,90])  
  15.  15   
  16.  16 plt.show()  
  17. ~                  

整个代码很好理解,在后面的13,14行没见过。第一个plt.rgrids(np.arange(0.5,2,0.5),angle=45) 表示绘制半径为0.5 1.0 1.5的三个同心圆,同时将这些半径的值标记在45度位置的那个直径上面。plt.thetagrids([0,45,90]) 表示的是在theta为0,45,90度的位置上标记上度数。得到的图像是:



3,柱状图:

核心代码matplotlib.pyplot.bar(leftheightwidth=0.8bottom=Nonehold=None**kwargs)里面重要的参数是左边起点,高度,宽度。下面例子:

  1.  1 import numpy as np  
  2.  2 import matplotlib.pyplot as plt  
  3.  3   
  4.  4   
  5.  5 n_groups = 5  
  6.  6   
  7.  7 means_men = (2035303527)  
  8.  8 means_women = (2532342025)  
  9.  9   
  10. 10 fig, ax = plt.subplots()  
  11. 11 index = np.arange(n_groups)  
  12. 12 bar_width = 0.35  
  13. 13   
  14. 14 opacity = 0.4  
  15. 15 rects1 = plt.bar(index, means_men, bar_width,alpha=opacity, color='b',label=    'Men')  
  16. 16 rects2 = plt.bar(index + bar_width, means_women, bar_width,alpha=opacity,col    or='r',label='Women')  
  17. 17   
  18. 18 plt.xlabel('Group')  
  19. 19 plt.ylabel('Scores')  
  20. 20 plt.title('Scores by group and gender')  
  21. 21 plt.xticks(index + bar_width, ('A''B''C''D''E'))  
  22. 22 plt.ylim(0,40)  
  23. 23 plt.legend()  
  24. 24   
  25. 25 plt.tight_layout()  
  26. 26 plt.show() 

得到的图像是:



再贴一图:

这是我关于pose识别率的实验结果,感觉结果真是令人不可思议!(非博主原文!)

def drawBarChartPoseRatio():
    n_groups = 5    
    means_VotexF36 = (0.84472049689441, 0.972477064220183, 1.0, 0.9655172413793104, 0.970970970970971)  
    means_VotexF50 = (1.0,              0.992992992992993, 1.0, 0.9992348890589136, 0.9717125382262997)
    means_VFH36    = (0.70853858784893, 0.569731081926204, 0.8902900378310215, 0.8638638638638638, 0.5803008248423096)
    means_VFH50    = (0.90786948176583, 0.796122576610381, 0.8475120385232745, 0.8873762376237624, 0.5803008248423096)  
    
    fig, ax = plt.subplots()  
    index = np.arange(n_groups)  
    bar_width = 0.3  
    opacity   = 0.4  
    
    rects1 = plt.bar(index,             means_VFH36,    bar_width/2, alpha=opacity, color='r', label='VFH36'   )  
    rects2 = plt.bar(index+ bar_width/2,  means_VFH50,  bar_width/2, alpha=opacity, color='g', label='VFH50'   )  
   
    rects3 = plt.bar(index+bar_width, means_VotexF36,     bar_width/2, alpha=opacity, color='c', label='VotexF36')  
    rects4 = plt.bar(index+1.5*bar_width, means_VotexF50, bar_width/2, alpha=opacity, color='m', label='VotexF50')  
    
    plt.xlabel('Category')  
    plt.ylabel('Scores')  
    plt.title('Scores by group and Category')  
    
    #plt.xticks(index - 0.2+ 2*bar_width, ('balde', 'bunny', 'dragon', 'happy', 'pillow'))
    plt.xticks(index - 0.2+ 2*bar_width, ('balde', 'bunny', 'dragon', 'happy', 'pillow'),fontsize =18)

    plt.yticks(fontsize =18)  #change the num axis size

    plt.ylim(0,1.5)  #The ceil
    plt.legend()  
    plt.tight_layout()  
    plt.show()

柱状图显示:



4:散列图,由离散的点构成的。

函数是:

matplotlib.pyplot.scatter(xys=20c='b'marker='o'cmap=Nonenorm=Nonevmin=Nonevmax=Nonealpha=Nonelinewidths=Noneverts=Nonehold=None,**kwargs),其中,xy是点的坐标,s点的大小,maker是形状可以maker=(5,1)5表示形状是5边型,1表示是星型(0表示多边形,2放射型,3圆形);alpha表示透明度;facecolor=‘none’表示不填充。例子如下:

  1.  1 import numpy as np  
  2.  2 import matplotlib.pyplot as plt  
  3.  3   
  4.  4 plt.figure(figsize=(8,4))  
  5.  5 x=np.random.random(100)  
  6.  6 y=np.random.random(100)  
  7.  7 plt.scatter(x,y,s=x*1000,c='y',marker=(5,1),alpha=0.5,lw=2,facecolors='none')  
  8.  8 plt.xlim(0,1)  
  9.  9 plt.ylim(0,1)  
  10. 10   
  11. 11 plt.show()  
上面代码的facecolors参数使得前面的c=‘y’不起作用了。图像:



5,3D图像,主要是调用3D图像库。看下面的例子:

  1.  1 import numpy as np  
  2.  2 import matplotlib.pyplot as plt  
  3.  3 import mpl_toolkits.mplot3d  
  4.  4   
  5.  5 x,y=np.mgrid[-2:2:20j,-2:2:20j]  
  6.  6 z=x*np.exp(-x**2-y**2)  
  7.  7   
  8.  8 ax=plt.subplot(111,projection='3d')  
  9.  9 ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8)  
  10. 10 ax.set_xlabel('x')  
  11. 11 ax.set_ylabel('y')  
  12. 12 ax.set_zlabel('z')  
  13. 13   
  14. 14 plt.show()  

得到的图像如下图所示:



到此,matplotlib基本操作的学习结束了,相信大家也可以基本完成自己的科研任务了。下面将继续学习python的相关课程,请继续关注。

参考书目:

《python科学计算》

《matplotlib手册》


matplotlib模块数据可视化-绘制柱状图

1 柱状图 经常在数据显示的时候我们会使用柱状图,通常柱状图又包括两种,一种是竖直的,一种是水平的柱状图,现在我们来进行一一讲解和演示。 由于水平柱状图和竖直柱状图相似,参数差不多,个别参数名称不...

matplotlib的基本用法(八)——绘制柱状图

matplotlib的基本用法(八)——绘制柱状图

Python画柱状图详解(matplotlib)

matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且...
  • yeizisn
  • yeizisn
  • 2016年11月27日 15:35
  • 4289

Python——使用matplotlib绘制柱状图

Python——使用matplotlib绘制柱状图 1、基本柱状图           首先要安装matplotlib 可以使用pip命令直接安装 # -*- coding: utf-8 -*- im...

python画图--柱状图

在上一篇(python画图--简单开始及折线图)的基础上,下面我们来画柱状图 有两种柱状图(一种为histogram, 另一种为bar chart) 一、histogram 主要用的的方法为: plt...

Python图表绘制:matplotlib绘图库入门

Python图表绘制:matplotlib绘图库入门 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便...

matplotlib(Python)画柱状图详解

转载自 Python画柱状图详解(matplotlib)matplotlib 是 python 最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方...
  • gatieme
  • gatieme
  • 2017年02月24日 16:27
  • 950

Python画柱状统计图

一、工具:python的matplotlib.plot 库二、案例:import matplotlib.pyplot as plt import numpy as np #添加图形属性 plt.xla...
  • cfyzcc
  • cfyzcc
  • 2016年07月25日 21:26
  • 2982

使用python画柱状图

方法一: import matplotlib.pyplot as plt;plt.rcdefaults() import numpy as np from pandas import Serie...
  • Olaking
  • Olaking
  • 2015年02月04日 09:55
  • 7810

python_使用matplotlib画柱状图(bar),散点图(scatter)

sudo apt-get install Python-scipy sudo apt-get install python-numpy sudo apt-get install pytho...
  • coloriy
  • coloriy
  • 2017年03月15日 18:06
  • 942
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python:Matplotlib 画柱状图(Code)
举报原因:
原因补充:

(最多只允许输入30个字)