模式识别的一个实验,要求画出贝叶斯决策的图。这里我是利用python中的matplotlib库实现的图线的拟合。主要对于matplotlib的使用可以参照博客:webary

  如果要绘制三维图像可以参考博客:python绘制三维图

具体实现:

接下来,就是对具体数据进行绘图了。比如我们要绘制一条y=x^2的曲线,可这样写代码:

  1. x = range() # 横轴的数据
  2. y = [i*i for i in x] # 纵轴的数据
  3. pl.plot(x, y) # 调用pylab的plot函数绘制曲线
  4. pl.show() # 显示绘制出的图

可以看到,要显示一个图非常简单,只要有了两个list作为输入数据,先后调用plot和show函数就可以了。一定要记得只有调用了show之后才会显示出来!只有plot是不行的!在实际运用中,可能这样一条简单粗暴的线可能并不是我们想要的最好的结果,比如,想要在图形上显示原始数据点,很简单,只要在plot函数中加上一个参数即可: pl.plot(x, y,'ob-') # 显示数据点,并用蓝色(blue)实现绘制该图形

这个参数用法比较灵活,可以从下面的值中组合选择:

  1. 颜色(color 简写为 c):
  2. 蓝色: 'b' (blue)
  3. 绿色: 'g' (green)
  4. 红色: 'r' (red)
  5. 蓝绿色(墨绿色): 'c' (cyan)
  6. 红紫色(洋红): 'm' (magenta)
  7. 黄色: 'y' (yellow)
  8. 黑色: 'k' (black)
  9. 白色: 'w' (white)
  10.  
  11. 线型(linestyle 简写为 ls):
  12. 实线: '-'
  13. 虚线: '--'
  14. 虚点线: '-.'
  15. 点线: ':'
  16. 点: '.'
  17.  
  18. 点型(标记marker):
  19. 像素: ','
  20. 圆形: 'o'
  21. 上三角: '^'
  22. 下三角: 'v'
  23. 左三角: '<'
  24. 右三角: '>'
  25. 方形: 's'
  26. 加号: '+'
  27. 叉形: 'x'
  28. 棱形: 'D'
  29. 细棱形: 'd'
  30. 三脚架朝下: ''(像'丫'
  31. 三脚架朝上: ''
  32. 三脚架朝左: ''
  33. 三脚架朝右: ''
  34. 六角形: 'h'
  35. 旋转六角形: 'H'
  36. 五角形: 'p'
  37. 垂直线: '|'
  38. 水平线: '_'

线是调好了,可是还想加上横纵坐标的说明呢?也很简单,在调用show函数之前添加如下代码:

  1. pl.xlabel(u"我是横轴")
  2. pl.ylabel(u"我是纵轴")

这里一定要记住,传递的字符串一定要是Unicode编码,如果是直接传入字符串,形式如 u'这里是要写的字符串' 即可。

现在就直观多了吧,终于像一个正常的图了,不过,还想再在图里加个图例该咋办?也不难,继续给plot传参数:

  1. pl.plot(x, y, 'ob-', label=u'y=x^2曲线图') # 加上label参数添加图例
  2. pl.legend() # 让图例生效

oh,看到图像上面光秃秃的,就好想给它加个标题: pl.title(u'图像标题') # 字符串也需要是unicode编码 有时候,我们的数据可能分布并没有这么集中,比如我们想要对项目中的某些数据进行绘图观察时发现,大量数据聚集在0附近,而少量很大的数据会导致图像显示效果很不好,比如:  

  1. x = range(10)+[100]
  2. y = [i*i for i in x]
  3. pl.plot(x, y, 'ob-', label=u'y=x^2曲线图')

这时,我们想要限制需要显示的坐标范围:

  1. pl.xlim(-1, 11) # 限定横轴的范围
  2. pl.ylim(-1, 110) # 限定纵轴的范围

这里是我实验的实现部分:

  1. # -*- 环境:python 3 -*-
  2. # -*- 代码于https://www.cnblogs.com/doggod/p/9917638.html -*-
  3. import cmath
  4. lis = [-3.9847,-3.5549,-1.2401,-0.9780,-0.7932,-2.8531,-2.7605,-3.7287,-3.5414,-2.2692,-3.4549,-3.0752,-3.9934,2.8792,-0.9780,0.7932,1.1882,3.0682,-1.5799,-1.4885,-0.7431,-0.4221,-1.1186,4.2532]
  5. pw1=0.9;pw2=0.1;e1=-2.0;a1=0.5;e2=2.0;a2=2.0 #定义所给的常数
  6. def func(x,a,b): #求正态分布的函数
  7. return ( 1.0/(cmath.sqrt(2.0*(cmath.pi.real)).real)*b*(cmath.exp(-1.0*(x-a)*(x-a)/2.0/b/b).real));
  8. point1 = [];pot1 = [] #为后面作图所画点集的list/正常点
  9. point2 = [];pot2 = [] #为后面作图所画点集的list/异常点
  10. for t in lis: #遍历所给细胞,判断所给的细胞是否是异常细胞
  11. p1 = (pw1 * func(t, e1, a1)) / (pw1 * func(t, e1, a1) + pw2 * func(t, e2, a2))
  12. p2 = (pw2 * func(t, e2, a2)) / (pw1 * func(t, e1, a1) + pw2 * func(t, e2, a2))
  13. if(p1>=p2):
  14. print(0,' ',end='')
  15. point1.append(t)
  16. pot1.append(0);
  17. else:
  18. print(1,' ',end='')
  19. point2.append(t)
  20. pot2.append(0);
  21.  
  22. import matplotlib.pyplot as plt #引入matplotlib与numpy - python画图工具
  23. import numpy as np
  24. plt.figure('拟合图像') #定义名字
  25. x1=[];y1=[] #存储后面linspace函数所产生点的list为拟合图像做准备
  26. x2=[];y2=[]
  27. a=np.linspace(-5,8,100) #产生均匀点
  28. for i in a:
  29. x1.append(i)
  30. y1.append((pw1 * func(i, e1, a1)) / (pw1 * func(i, e1, a1) + pw2 * func(i, e2, a2))) #计算所给i的后验概率
  31. x2.append(i)
  32. y2.append((pw2 * func(i, e2, a2)) / (pw1 * func(i, e1, a1) + pw2 * func(i, e2, a2)))
  33.  
  34. plt.plot(x1,y1,label= u'normal cell' ) #画出正常点的线
  35. plt.plot(x2,y2,label= u'abnormal cell' ) #画出异常点的线
  36. plt.xlabel(u"Cell attribute value") #为x轴取名
  37. plt.ylabel(u"Post continuation probability") #为y轴取名
  38.  
  39. plt.plot(point1,pot1,'gp') #画出点集
  40. plt.plot(point2,pot2,'mx')
  41. plt.legend() #显示图例
  42. plt.show()

实现结果如图所示:

利用matplotlib的plot函数实现图像绘制的更多相关文章

  1. 利用matplotlib中imshow()函数绘图

    matplotlib  是Python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图 ...

  2. python 利用matplotlib中imshow()函数绘图

    matplotlib 是python最著名的2D绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中.通过简单的绘图语 ...

  3. 利用数学软件Mathematica的三维图像进行建模

    前言 最近在使用Mathematica进行二元函数的图像绘制,在导出图像选项中看到了obj,maya等三维格式.其实很早之前我就有过这样的想法,但之前使用的是matlab作图,无法导出三维格式.那么废 ...

  4. Matlab中plot函数参数解析

    功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1,...) plot(X1,Y1,LineSpec,...) plot(...,'PropertyName',PropertyValue, ...

  5. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  6. Matlab中plot函数全功能解析

    Matlab中plot函数全功能解析 功能 二维曲线绘图 语法 plot(Y)plot(X1,Y1,...)plot(X1,Y1,LineSpec,...)plot(...,'PropertyName ...

  7. Python的工具包[2] -> matplotlib图像绘制 -> matplotlib 库及使用总结

    matplotlib图像绘制 / matplotlib image description  目录 关于matplotlib matplotlib库 补充内容 Figure和AxesSubplot的生 ...

  8. python中利用matplotlib绘图可视化知识归纳

    python中利用matplotlib绘图可视化知识归纳: (1)matplotlib图标正常显示中文 import matplotlib.pyplot as plt plt.rcParams['fo ...

  9. R可视化:plot函数基础操作,小白教程

    最近迷恋上了画图,一方面是觉得挺有意思的,另一方面是觉得自己确实画图方面比较弱,所以决定比较系统地回顾反思一下,同时顺带记录下来分享给大家.也确实是好久好久没更新文章了,真的是杂事太多太忙太牵扯精力没 ...

随机推荐

  1. 浅谈 Mysql 中的索引

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  2. 分享MYSQL中的各种高可用技术

    分享MYSQL中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...

  3. python第九十天----jquery

    jQuery http://jquery.cuishifeng.cn/ 相当于js的模块,类库 DOM/BOM/JavaScript的类库 一.查找元素 jQuery 选择器 直接找到某个或者某个标签 ...

  4. SELinux 是什么?

    一.SELinux的历史 SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)领导开发的GPL项目,它拥有一个灵活而 ...

  5. ARP单播请求?

    在我的理解中,ARP请求是已知对方的IP地址,想要请求对方的MAC地址,用以封装以太网帧头.因此在不知道对方MAC地址的情况下,会广播ARP请求到整个子网,让子网中的所有设备收到这个广播ARP请求报文 ...

  6. 浅谈tidb事务与MySQL事务之间的区别

    MySQL是我们日常生活中常见的数据库,他的innodb存储引擎尤为常见,在事务方面使用的是扁平事务,即要么都执行,要么都回滚.而tidb数据库则使用的是分布式事务.两者都能保证数据的高一致性,但是在 ...

  7. Java SE和Java EE应用的性能调优

    凡事预则立,不预则废,和很多事情一样.Java性能调优的成功.离不开行动计划.方法或策略以及特定的领域背景知识.为了在Java性能调优工作中有所成就.你得超越"花似雾中看"的状态, ...

  8. 关于一台机器部署多个tomcat的小记

    一台机器部署多个tomcat在很多时候都是有可能的,比如说多个tomcat配合nginx负载更可能好的利用CPU,或者更新程序时做主备切换等. 1.直接下载或者复制一个已有的tomcat,第一个tom ...

  9. CSS3渐变——线性渐变

    渐变背景一直以来在Web页面中都是一种常见的视觉元素.但一直以来,Web设计师都是通过图形软件设计这些渐变效果,然后以图片形式或者背景图片的形式运用到页面中.Web页面上实现的效果,仅从页面的视觉效果 ...

  10. 转载 互斥体与互锁 <第五篇>

    互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex)).互斥体禁止多个线程同时进入受保护的代码“临界区”.因此,在任意时刻,只有一个线程被允许进入这 ...