首页 > 其他 > 详细

数据可视化

时间:2019-09-06 18:20:03      阅读:86      评论:0      收藏:0      [点我收藏+]

一,matplotilb库(数学绘图库)

    mat数学 plot绘图  lib库

    matplotlib.pyplot(缩写mp)->python 最常用接口

    mp.plot(水平坐标,垂直坐标数组)

    X:[1 2 3 4]

    Y:[5 6 7 8]

    .mp.plot(X,Y)

    代码:plot(xxx,linestyle=线型,linewidth=线宽,color=颜色)

  例:

  

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 from numpy import pi
 4 
 5 x= np.linspace(-np.pi,np.pi,1000)  #线性空间划分  1000个横坐标
 6 #余弦曲线坐标
 7 cos_y = np.cos(x)/2  #x是一个数组 numpy的cos可以接受数组,无需遍历矢量化
 8 #正弦曲线坐标
 9 sin_y = np.sin(x)
10 #x水平坐标,cos_y , sin_y 垂直坐标
11 # mp.plot((x,cos_y),color=‘limegreen‘)
12 mp.plot(x,cos_y,linestyle=--,linewidth=10,color=black)
13 mp.plot(x,sin_y)
14 mp.show()
View Code

 

  看手册功能:help(mp.plot)

  设置图标范围

    mp.xlim(左边界,右边界)

    mp.xlim(地边界,顶边界)

    功能:设置图标范围

    如果设置最大值最小值,则全部填满。

  显示弧度值:

    mp.xticks(刻度位置数组,刻度文本数组)

    mp.yticks(刻度位置数组,刻度文本数组)

    刻度文本数组转义字符串写法:

      [r‘$\pi$,r‘$\frac{分子}{分母}$‘,r‘$0$‘]

      3/4pi = >r‘$\frac{3\pi}{4}$‘

  引十字座标:

    作用:拿到框线的轴

      ax=mp.gca()    #获取等前坐标轴

      ax.spines[‘left‘].set_position((‘data‘,0))  #设置位置边框(有四边)    

         ax.spines[‘left‘].set_color(颜色)    #设置位置边框颜色

 

    显示图列和位置

      mp.plot(...,label=r‘$y=sin(x)$‘)

      mp.legend(loc=‘upper left‘)

    标记一些特殊的点:

      散点图(不连线)

      mp.scatter(水平坐标数组,垂直坐标数组,marker=点型,s=大小,edgecolor=勾边色,faceolor=填充色,zorder=Z序)

      Z序就是绘画的顺序,zorder数越大,点越晚压在线上

        Matplotilb绘画顺序是线画点,再画线

     图上做注释:

      mp.annotate(备注文本,xy=目标位置,需要coords=目标坐标系,xytext=文本位置,Textcoords=文本坐标系,fontsize=字体大小,arrowprops=箭头属性)

  例:

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 
 4 x =np.linspace(-np.pi,np.pi,1000)  #线性空间划分
 5 
 6 cos_y = np.cos(x)/2     #x是一个数组nupmy的cos可以接受数组,无需遍历矢量化
 7 sin_y=np.sin(x)
 8 xo=np.pi*3/4
 9 yo_cos=np.cos(xo)/2
10 yo_sin = np.sin(xo)
11 
12 
13 # mp.xlim(x.min(),x.max())  #取最小的值做x的左边界,最大值右边界
14 # mp.ylim(sin_y.min(),sin_y.max())
15 
16 #乘上1.1,上下左右都空开距离
17 mp.xlim(x.min()*1.1,x.max()*1.1)
18 mp.ylim(sin_y.min()*1.1,sin_y.max()*1.1)
19 
20 mp.xticks([
21     -np.pi,-np.pi/2,0,np.pi/2,np.pi*3/4,np.pi],
22     [r$-\pi$,r$-\frac{\pi}{2}$,r$0$,r$\frac{\pi}{2}$,r$\frac{3\pi}{4}$,r$\pi$]
23 )
24 mp.yticks([-1,-0.5,0,5,1])
25 
26 ax = mp.gca()
27 ax.spines[left].set_position((data,0))
28 ax.spines[bottom].set_position((data,0))
29 ax.spines[right].set_color(none)       #设置为color=none就没有边框了
30 ax.spines[top].set_color(none)      #设置为color=none就没有边框了
31 
32 
33 mp.scatter([xo,xo],[yo_cos,yo_sin],s=60,
34            edgecolors=limegreen,facecolor=white,zorder=10
35            )
36 
37 mp.annotate(
38     r$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$,
39     xy=(xo,yo_cos),xycoords=data,
40     xytext=(-90,-40),textcoords=offset points,
41     fontsize=14,
42     arrowprops=dict(arrowstyle=->,connectionstyle=arc3,rad=.2))
43 
44 mp.annotate(
45     r$sin(\frac{3\pi}{4})=-\frac{\sqrt{2}}{2}$,
46     xy=(xo,yo_sin),xycoords=data,
47     xytext=(20,20),textcoords=offset points,
48     fontsize=14,
49     arrowprops=dict(arrowstyle=->, connectionstyle=arc3,rad=.2))
50 
51 
52 
53 
54 mp.plot([xo,xo],[yo_cos,yo_sin],linestyle=--,linewidth=1,color=limegreen)
55 
56 mp.plot(x,cos_y,linestyle=-,linewidth=2,color=dodgerblue,label =r$y=cos(x)$)
57 mp.plot(x,sin_y,linestyle=-,linewidth=2,color=orangered,label =r$y=sin(x)$)
58 mp.legend(loc=upper left)
59 mp.show()
View Code

 

==============================================以上是常用matplotilb方法=====================================================

图形对象

  1.具体写法:

      mp.figure(图形对象名,figsize=窗口大小,dpi=分辨率,facecolor=窗口颜色)

      mp.figure()方法:

        第一次调用是创建,第二次创建为再次置为当前口

      mp.title()写标题

        mp.title(‘XXXX‘,fontsize=20)

      mp.xlabel()坐标轴的标签

        mp.xlabel(标签文字,字体大小)

        mp.xlabel(‘x‘,fortsize=12)

      mp.tick_params()设置刻度参数

        mp.tick_params(labelsize=10)

      mp.grid()设置格线

        mp.grid(linestyle=‘:‘)

      例:

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 
 4 x= np.linspace(-np.pi,np.pi,1000)
 5 cos_y = np.cos(x)/2
 6 sin_y=np.sin(x)
 7 
 8 mp.figure(Figuer Objecti 1,figsize=(6,4),dpi=120,facecolor=lightgray)
 9 mp.title(Figure Objcet 1,fontsize=16)
10 
11 mp.xlabel(x,fontsize=12)
12 mp.xlabel(y,fontsize=12)
13 mp.tick_params(labelsize=10)
14 mp.grid(linestyle=:)
15 
16 mp.figure(Figuer Objecti 2,figsize=(6,4),dpi=120,facecolor=lightgray)
17 mp.title(Figure Objcet 2,fontsize=16)
18 
19 mp.xlabel(x,fontsize=12)
20 mp.xlabel(y,fontsize=12)
21 mp.tick_params(labelsize=10)
22 mp.grid(linestyle=:)
23 
24 
25 mp.figure(Figuer Objecti 1) #再调用一下figuer o1,就会到1的窗口下绘画
26 mp.plot(x,cos_y,label=r$y=\frac{1}{2}cos(x)$)
27 mp.legend()
28 mp.figure(Figuer Objecti 2) #再调用一下figuer o2,就会到2的窗口下绘画
29 mp.plot(x,sin_y,label=r$y=sin(x)$)
30 mp.legend()
31 
32 mp.show()   #只有show针对所有,其余的函数都只针对当前对象
View Code

 

  2.图形

    1)子图

      创建子图,大图里创建子图

      1.缺省(默认)布局:

        mp.subplot(行数,列数,图号)  

      例:mp.subplot(2,3,1)或者mp.subplot(231)

        子图显示文字:

          mp.text(对应中心位置的比例,对应中心位置的比例,图号数值,

              ha=水平对其方式,va=垂直对齐方式,

              size=尺寸大小,alpha=透明度)

          mp.tight_layout()     紧凑 不空很多格 边距变窄  

       例:

技术分享图片
 1 import matplotlib.pyplot as mp
 2 mp.figure(facecolor=lightgray)
 3 for i in range(2):      #2代表2行
 4     for j in range(3):      #3代表3列
 5             k= i * 3+j+1
 6             #mp.subplot(231)    #2行3列第一张
 7             mp.subplot(2,3,k)
 8             mp.xticks(())       #不带刻度线
 9             mp.yticks()
10             mp.text(0.5,0.5,str(k),ha=center,va=center,size=36,alpha=0.5)
11 
12 mp.tight_layout()       #紧凑 不空很多格 边距变窄
13 mp.show()
View Code

 

     2.栅格布局

        先建立一个栅格布局器:

          import matplotlib.gridspes as mg

          gs = mg.GridSpes(行数,列数)    <-栅格布局器

          mp.subplot(gs[行,列])

      栅格布局优势:布局均匀

       例:

技术分享图片
 1 import matplotlib.pyplot as mp
 2 import matplotlib.gridspec as mg
 3 
 4 
 5 mp.figure(facecolor=lightgray)
 6 gs=mg.GridSpec(3,3)  #生成栅格布局器,3行3列  九宫格
 7 mp.subplot(gs[0,:2])      #gs[0,:2],0代表第0行,:2代表前两例
 8 mp.xticks(())
 9 mp.yticks(())
10 mp.text(0.5,0.5,1,ha=center,va=center,size=36,alpha=0.5)
11 
12 
13 mp.subplot(gs[1:,0])
14 mp.xticks(())
15 mp.yticks(())
16 mp.text(0.5,0.5,2,ha=center,va=center,size=36,alpha=0.5)
17 
18 
19 mp.subplot(gs[2,1:])
20 mp.xticks(())
21 mp.yticks(())
22 mp.text(0.5,0.5,3,ha=center,va=center,size=36,alpha=0.5)
23 
24 
25 mp.tight_layout()
26 mp.show()
View Code

 

     3.自由布局

        mp.axes([左下角水平坐标,左下角垂直坐标,宽度,高度])

        优点:所有尺寸参数都是相对比例

        缺点:同时输入几个,最后一张图能在另一张里面

       例:

技术分享图片
 1 import matplotlib.pyplot as mp
 2 
 3 mp.figure(facecolor=lightgray)
 4 mp.axes([0.03,0.038,0.94,0.924])
 5 mp.xticks(())
 6 mp.yticks(())
 7 mp.text(0.5,0.5,1,ha=center,va=center,size=36,alpha=0.5)
 8 
 9 
10 mp.axes([0.63,0.076,0.31,0.308])
11 mp.xticks(())
12 mp.yticks(())
13 mp.text(0.5,0.5,2,ha=center,va=center,size=36,alpha=0.5)
14 
15 
16 mp.show()
View Code

 

   2)坐标刻度定位器

       定位器对象=mp.xxLocator(...)

          ax=mp.gca()

       主刻度:ax.xaxis.set_major_locator(定位器对象)#x轴,让定位器对象帮我们定义刻度。

       次刻度:ax.xaxis.set_minor_locator(定位器对象)#x轴,让定位器对象帮我们定义刻度

       locators=[

            ‘mp.NullLocator()‘,    #空定位器。不需要参数,可以被解释执行

            ‘mp.MaxNLocator(nbins=3,steps=[1,3,5,7,9])‘,  #等分定位器。最多分n段,从后续列表中选一个等分的点

               ‘mp.FixedLocator(locs=[0,2,5,5,7,5,10])‘,     #固定定位器。等价于直接调用xticks。
             ‘mp.AutoLocator()‘,            #自动定位器。特点:隔间不太密也不太疏,自动匹配
             ‘mp.IndexLocator(offset=0.5,base=1.5)‘,  #索引定位器。Offset起始点,base是隔间。
            ‘mp.MultipleLocator()‘,          #次刻度定位器。
               ‘mp.LinearLocator(numticks=21)‘,     #线性均分定位。如例子,等分20份。
            mp.LogLocator(base=2,subs=[1.0])‘    #指数定位器。
            ]

      例:

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 
 4 mp.figure()
 5 
 6 locators = [
 7     mp.NullLocator(),
 8     mp.MaxNLocator(nbins=3,steps=[1,3,5,7,9]),
 9     mp.FixedLocator(locs=[0,2.5,5,7.5,10]),
10     mp.AutoLocator(),
11     mp.IndexLocator(offset=0.5,base=1.5),
12     mp.MultipleLocator(),
13     mp.LinearLocator(numticks=21),
14     mp.LogLocator(base=2,subs=[1.0])]
15 
16 n_locators = len(locators)
17 
18 for i, locator in enumerate(locators):
19     mp.subplot(n_locators,1,i+1)
20     mp.xlim(0,10)
21     mp.ylim(-1,1)
22     mp.yticks(())
23     mp.xticks(())
24     ax = mp.gca()
25     ax.spines[left].set_color(none)
26     ax.spines[top].set_color(none)
27     ax.spines[right].set_color(none)
28     ax.spines[bottom].set_position((data,0)) #底轴放中间 因为1到-1,0在中间
29     ax.xaxis.set_major_locator(eval(locator)) #eval函数解释执行 产生类的对象,主刻度执行器
30     ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))#此刻度定位 0.1为间隔
31     #上面做完但是没有图
32     mp.plot(np.arange(11),np.zeros(11),c=none)  #zeros是全零 y坐标
33     mp.text(5,0.3, locator[3:], ha=center,size=12)
34 
35 
36 mp.tight_layout()
37 mp.show()
View Code

      3.散点图

        散点图的意义:

            可以让一个点附带更多信息。

            总是用两个坐标想,y坐标来表示。

        例子:x代表身高,y代表年龄

          X=np.random.normal(0,     1,         n)这是正态分布规律的随机数     

                    |      |    |

                    V    V    v

                  平均值u  标志差  n个

          u=0

          o=1  代表标准的正太分布

          o  表示标准差  o 值越大就越集中; o值越小瘦高 , o越大越平坦。

          o²方差

          区域填充

          mp.fill_between(水平座标数组,垂直座标数组,垂直座标终点数组,条件,color=颜色,alpha=透明度)

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 
 4 n=1000
 5 x=np.linspace(0,8*np.pi,n)#线性分隔
 6 sin_y =np.sin(x)
 7 cos_y=np.cos(x/2)/2     #周期短频率高
 8 
 9 mp.figure(Fill,facecolor=lightgray)
10 mp.title(Fill,fontsize=20)
11 mp.xlabel(x,fontsize=14)
12 mp.ylabel(y,fontsize=14)
13 mp.tick_params(labelsize=10)            #标签文本的字体大小
14 mp.grid(linestyle=:)
15 
16 mp.plot(x,sin_y,c=dodgerblue,label=r$y=sin(x)$) #线用plot来画
17 mp.plot(x,cos_y,c=orangered,label=r$y=\frac{1}{2}cos(\frac{x}{2})$)
18 mp.fill_between(x,cos_y,sin_y,cos_y < sin_y,color=dodgerblue,alpha=0.5)
19 mp.fill_between(x,cos_y,sin_y,cos_y > sin_y,color=orangered,alpha=0.5)
20 mp.legend()
21 
22 
23 mp.tight_layout()
24 mp.show()
View Code

      4.柱状图

        mp.bar(水平坐标数组,高度数组,ec=边缘颜色,fc=填充颜色,label=标签文本,alpha=透明度)

        y1=np.random.uniform(0.5,1.0,n)

        在0.5和1.0内产生n个随机数

      例:

技术分享图片
 1 import numpy as np
 2 import matplotlib.pyplot as mp
 3 
 4 n=12
 5 x=np.arange(n)  #生成整数数组
 6 y1 =(1-x/n)*np.random.uniform(0.5,1.0,n)
 7 y2 =(1-x/n)*np.random.uniform(0.5,1.0,n)
 8 mp.figure(Bar,facecolor=lightgray)
 9 mp.title(Bar,fontsize=20)
10 mp.ylim(-1.25,1.25)
11 mp.xlabel(x,fontsize=14)
12 mp.ylabel(y,fontsize=14)    #12个数字
13 mp.tick_params(labelsize=10)
14 mp.grid(axis=y,linestyle=:)     #axis=‘y‘   只有水平线的网格
15 
16 for _x,_y in zip(x,y1):
17     #取矩形条的位置和高度
18     #显示文字,两位小数精度的浮点数来表示格式化占位符
19     mp.text(_x,_y,%.2f% _y,ha=center,va=bottom)  #块在水平底下
20 
21 
22 for _x, _y in zip(x,y2):
23     #取矩形条的位置和高度
24     #显示文字,两位小数精度的浮点数来表示格式化占位符
25     mp.text(_x, -_y-0.015,%.2f% _y,ha=center,va=top)  #块在水平底下
26 
27 mp.bar(x,y1,ec=white,fc=dodgerblue,label=Sample 1)
28 mp.bar(x,-y2,ec=white,fc=dodgerblue,alpha=0.5,label=Sample 2)
29 mp.legend()
30 
31 mp.show()
View Code

 

数据可视化

原文:https://www.cnblogs.com/AloneDKN/p/11466119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!