matplotlib学习——绘制散点图+flatten函数用法

在最近学习《机器学习实战时》,在使用matplotlib时,往往是这样:import matplotlib.pyplot as plt

接下来fig=plt.figure() 绘制图表

fig.add_subplot(111)是什么意思呢?

函数是在大的画布中绘制小画布,111表明:将画布分成1行1列,获取从上到下,从左到右第1块小画布。

同理add_subplot(2,3,5)的意思不难理解。如果将画布分成3行4列要在第10块画布作画怎么写呢?add_subplot(3,4,10)即可。


绘图实例:代码来自《机器学习实战》

import matplotlib.pyplot as plt
    dataMat,labelMat=loadDataSet()
    dataArr=array(dataMat)
    n=shape(dataArr)[0]
    x1cord1=[];x2cord1=[]#实际分类为1的样例,其特征对应值存放处
    x1cord2=[];x2cord2=[]
    for i in range(n):
        if int(labelMat[i])==1:
            x1cord1.append(dataArr[i,1]);x2cord1.append(dataArr[i,2])
        else:
            x1cord2.append(dataArr[i,1]);x2cord2.append(dataArr[i,2])
    fig=plt.figure()
    ax=fig.add_subplot(111)
    ax.scatter(x1cord1,x2cord1,s=30,c='red',marker='s')#scatter用于绘制散点
    ax.scatter(x1cord2,x2cord2,s=30,c='green')#至此绘制出了分别属于两类的点
    x1=arange(-3.0,3.0,0.1)#arange与range函数类似,不过range函数产生的是list,而arange产生的是array。表明产生-0.3到0.3之间的数,步长为0.1
    weightsT=array(weights)
    x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]#weights是matrix,进行计算后得到的x2也是matrix,而x1是array,所以需要统一.|x1|==|x2|
    ax.plot(x1,x2)#调用plot函数绘制得到由点生成的线条
    plt.xlabel('X1');plt.ylabel('X2');#为横纵坐标命名
    plt.show()

代码中xcord的类型可以是列表,也可以是array。好像是这样,array,list还有matrix的用法需要讨论。

为什么:x2=(-weightsT[0]-weightsT[1]*x1)/weightsT[2]。

因为z=w0+w1*x1+w2*x2(在本例中),将z代入sigmoid函数中求值进而分类,观察sigmoid函数看到自变量为0前后是图像跳跃的点,如下如sigmoid函数图:

所以z==0为分隔点,令z=0,得到x1与x2之间的关系。运行代码:

得到如下图:

 

添加flatten函数的用法:

部分内容来自http://blog.csdn.net/maoersong/article/details/23823925

flatten函数可以用在array与matrix上,但是不可用在list上:

1:用在array:

    >>> a = [[1,3],[2,4],[3,5]]  
    >>> a = array(a)  
    >>> a.flatten()  
    array([1, 3, 2, 4, 3, 5])  

2、用在列表:直接使用报错

>>> a = [[1,3],[2,4],[3,5]]  
>>> a.flatten()  
  
Traceback (most recent call last):  
  File "<pyshell#10>", line 1, in <module>  
    a.flatten()  
AttributeError: 'list' object has no attribute 'flatten'

如下为正确用法:

    >>> a = [[1,3],[2,4],[3,5],["abc","def"]]  
    >>> a1 = [y for x in a for y in x]  
    >>> a1  
    [1, 3, 2, 4, 3, 5, 'abc', 'def']  

3、用在矩阵:

    >>> a = [[1,3],[2,4],[3,5]]  
    >>> a = mat(a)  
    >>> y = a.flatten()  
    >>> y  
    matrix([[1, 3, 2, 4, 3, 5]])  
    >>> y = a.flatten().A  
    >>> y  
    array([[1, 3, 2, 4, 3, 5]])  
    >>> shape(y)  
    (1, 6)  
    >>> shape(y[0])  
    (6,)  
    >>> y = a.flatten().A[0]  
    >>> y  
    array([1, 3, 2, 4, 3, 5])  

在绘制图像,需要部分数据时,可以首先获取需要的矩阵中的一列数,然后通过调用flatten函数转成单行矩阵,再调用.A,获取二维array形式,获取下标为0的元素。此时得到单维array形式,可以在ax.scatter中作为参数,绘制图形。

得到图形如下:

 

转载于:https://www.cnblogs.com/litian0605/p/5242131.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值