matplotlib

    技术2022-07-10  89

    python数据可视化分析–matplotlib

    matplotlib是基于python语言的开源项目,为python提供了一个数据绘图包。

    1、散点图

    散点图显示两组数据的值,每个点的坐标位置由变量的值决定。 由一组不连接的点完成,用于观察两种变量的相关性。

    股票散点图

    open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True) change=close-open yesterday=change[:-1] today=change[1:] plt.scatter(today,yesterday) plt.show() s=200 marker='v' c='green' alpha=1 plt.scatter(x, y1, s=50, marker='o', c='red', alpha=0.5)#s是面积的意思,调节点的面积,c为颜色,marker为点的形状。alpha为透明度 plt.show() open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True) change=close-open yesterday=change[:-1] today=change[1:] plt.scatter(yesterday,today,s=500,c='r',alpha=1) plt.show()

    2、折线图

    折线图使用直线段将各个数据连接起来组成的图形 常用来观察数据随时间变化的趋势 如股票价格,温度变化等。

    import numpy as np import matplotlib.pyplot as plt #日期数据比较特殊,转化为matplotlib可以识别的数据 import matplotlib.dates as mdates date,open,close = np.loadtxt('000001.csv',delimiter=',',converters={0:mdates.bytespdate2num('%m/%d/%Y')}, skiprows=1,usecols=(0,1,4),unpack=True) plt.plot(date,open) #把x轴转化为时间/改格式 plt.plot_date(date,open,linestyle='--',color = 'red',marker = '<') plt.show()

    3、条形图

    以长方形的长度为变量的统计图表 用来比较多个项目分类的数据大小 通常利用于较小的数据集分析:不同季度销量等 单变量垂直方向:

    import numpy as np import matplotlib.pyplot as plt N=5 y=[20,10,30,25,15] index = np.arange(N) p1 = plt.bar(x=index,height=y,width=0.5,color='red') plt.show()

    单变量水平方向:

    import numpy as np import matplotlib.pyplot as plt N=5 y=[20,10,30,25,15] index = np.arange(N) p1 = plt.bar(x=0,bottom=index,width=y,height=0.5,color='red',orientation='horizontal') #第二种写法 plt.barh(x=0,bottom=index,width=y,height=0.5,color='red') plt.show()

    双变量水平:

    import numpy as np import matplotlib.pyplot as plt index = np.arange(6) x_1 = [52, 69, 58, 12, 39, 75] y_1 = [56, 15, 84, 65, 45, 48] width = 0.3 plt.bar(index,x_1,width,color='b') plt.bar(index+width,y_1,width,color='r') plt.show()

    双变量堆砌:

    import numpy as np import matplotlib.pyplot as plt index = np.arange(6) x_1 = [52, 69, 58, 12, 39, 75] y_1 = [56, 15, 84, 65, 45, 48] width = 0.3 plt.bar(index,x_1,width,color='b') plt.bar(index,y_1,width,color='r',bottom=x_1) plt.show()

    4、直方图

    由一系列高度不等的纵向条形组成,表示数据的分布情况 如某年纪同学的身高分布情况(连续型数组) 单变量直方图

    import numpy as np import matplotlib.pyplot as plt mu = 100 # mean of distribution(均值) sigma = 20 # standard deviation of distribution(标准差) x = mu + sigma * np.random.randn(2000)#大小为2000的数组 plt.hist(x, bins=10,color='red',normed=True)#bins代表图里有几个直方 plt.hist(x, bins=50,color='green',normed=False) plt.show()

    双变量直方图

    #双变量直方图 x = np.random.randn(1000)+2 y = np.random.randn(1000)+6 plt.hist2d(x, y, bins=40) plt.show()

    饼状图

    饼状图显示一个数据系列中各项的大小与各项总和的比例 饼状图中的数据点显示为整个饼状图的百分比 如前十大品牌所占市场份额等。

    import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec # Some data labels = 'A', 'B', 'C', 'D' fracs = [15, 30, 45, 10] explode = (0, 0.05, 0, 0) # Make square figures and axes plt.axes(aspect=1)#x,y轴比例变为1:1 explode = (0.05, 0.05, 0.05, 0.05) #plt.pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True) plt.pie(fracs, explode=explode, labels=labels, autopct='%.0f%%', shadow=True)#autopct加上所占有的值,explode突出的显示某一部分,shadow加阴影 plt.show()

    箱型图

    箱形图又称为盒须图,盒式图或箱线图 是一种用于显示一组数据分散情况资料的统计图 上边缘,上四分位数,中位数,下四分位数,下边缘,异常值

    import numpy as np import matplotlib.pyplot as plt np.random.seed(100) data = np.random.normal(size=1000, loc=0.0, scale=1.0) plt.boxplot(data,sym='o',whis=1.5) plt.show() data = np.random.normal(size=(100, 4), loc=0.0, scale=1.0) labels = ['A','B','C','D'] plt.boxplot(data, labels=labels) plt.show()

    颜色和样式

    八种内建默认颜色缩写: b:blue g:green r:red c:cyan m:magenta y:yellow k:black w:white 其他颜色表示方法;’ 灰色阴影 html 十六进制 RGB元组

    点和线的样式有23种,查完使用 样式字符串: 可以将颜色,点型、线形写成一个字符串如: cx– mo: kp-

    import numpy as np import matplotlib.pyplot as plt # y=np.arange(1,5) plt.plot(y) plt.show() ''' #������ɫ y=np.arange(1,5) plt.plot(y,'y'); plt.plot(y+1,color=(0.1,0.2,0.3)); plt.plot(y+2,'#FF00FF'); plt.plot(y+3,color='0.5') plt.show() ''' ''' #���� y=np.arange(1,5) plt.plot(y,'--'); plt.plot(y+1,'-.'); plt.plot(y+2,':'); plt.show() ''' #����״ ''' y=np.arange(1,5) plt.plot(y,'o'); plt.plot(y+1,'D'); plt.plot(y+2,'^'); plt.plot(y+3,'s'); plt.plot(y+4,'p'); plt.plot(y+5,'x'); plt.show() ''' y=np.arange(1,5) plt.plot(y,'cx--'); plt.plot(y+1,'kp:'); plt.plot(y+2,'mo-.'); plt.show()

    面向对象VSMatlab style

    三种方式简介: pyplot:经典高层封装 pylab:将Matplotlib和Numpy合并的模块,模拟matlab的编程环境 面向对象的方式:Mtaplotlib的精髓,更基础和底层的方式。 pyplot

    #pyplot import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) plt.plot(x,y) plt.title('pyplot') plt.show()

    pyplab

    #pylab from pylab import * x=arange(0,10,1) y=randn(len(x)) plot(x,y) title('random numbers') show()

    面向对象

    #Object Oriented import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) fig=plt.figure()#先生成一个fig对象 ax=fig.add_subplot(111)#生成坐标轴对象 l,=plt.plot(x,y) t=ax.set_title('object oriented') plt.show()

    子图

    fig = plt.figure() Figure实例 可以添加Axes实例

    ax = fig.add_subplot(111) 返回Axes实例 参数1:子图总行数 参数2:子图总列数 参数3:子图位置 在Figure上添加Axes的常用方法:

    import matplotlib.pyplot as plt import numpy as np x=np.arange(1,100) plt.subplot(221) plt.plot(x,x) plt.subplot(222) plt.plot(x,-x) plt.subplot(223) plt.plot(x,x*x) plt.subplot(224) plt.plot(x,np.log(x)) plt.show()

    多图/直接生成多张图

    import matplotlib.pyplot as plt fig1=plt.figure() ax1=fig1.add_subplot(111) ax1.plot([1,2,3],[3,2,1]) fig2=plt.figure() ax2=fig2.add_subplot(111) ax2.plot([1,2,3],[1,2,3]) plt.show()

    网格

    以网格的形式作为整张图的背景

    import numpy as np import matplotlib.pyplot as plt y=np.arange(1,5) plt.plot(y,y*2) plt.grid(True) plt.show() #交互中打开关闭网格 plt.grid() import numpy as np import matplotlib.pyplot as plt y=np.arange(1,5) plt.plot(y,y*2) plt.grid(True,color='g',linestyle='-',linewidth='2') plt.show() #Object Oriented import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) fig=plt.figure() ax=fig.add_subplot(111) l,=plt.plot(x,y) ax.grid(color='g') plt.show()

    图例

    import matplotlib.pyplot as plt import numpy as np x=np.arange(1,11,1) y=x*x plt.plot(x,x*2,label='Normal') plt.plot(x,x*3,label='Fast') plt.plot(x,x*4,label='Faster') plt.legend(loc=3,ncol=2) plt.show() #方式2 plt.plot(x,x*2) plt.plot(x,x*3) plt.plot(x,x*4) plt.legend(['Normal','Fast','Faster']) plt.show() #OO面向对象 import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) fig=plt.figure() ax=fig.add_subplot(111) l,=plt.plot(x,y) ax.legend(['ax legend']) line, =ax.plot(x,y,label='Inline label') line.set_label('label via method') ax.legend() plt.show()

    调节坐标轴范围

    查看坐标轴范围:

    plt.axis()

    直接调节坐标轴大小:

    plt.axis([-5,5,10,20])#X[-5,5] Y[10,20]

    分别查看两个坐标轴,进行调整: 查看

    plt.xlim()

    调节X轴

    plt.xlim([2,12])

    调整坐标轴刻度: 普通调整

    import matplotlib.pyplot as plt import numpy as np x = np.arange(1,11,1) plt.plot(x,x) ax = plt.gca()#获取当前的坐标轴 #调节坐标轴需要一个函数 ax.locator_params(nbins=5)#代表坐标轴有10个格 #只调节一个轴用法: ax.locator_params('x',nbins=5) plt.show()

    日期作为坐标轴的调整

    #用日期做坐标轴的调整 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np import datetime fig = plt.figure() start = datetime.datetime(2015,1,1) stop = datetime.datetime(2016,1,1) delta = datetime.timedelta(days=1)#日期间隔为一天 dates = mpl.dates.drange(start,stop,delta) y = np.random.rand(len(dates)) ax = plt.gca() ax.plot_date(dates,y,linestyle='-',marker='') date_format = mpl.dates.DateFormatter('%Y-%m-%d')#将日期显示为年-月-天 ax.xaxis.set_major_formatter(date_format)#将上行定义应用 plt.show()

    ***一个图形中画多个图像***双坐标轴 plt方式

    import matplotlib.pyplot as plt import numpy as np x = np.arange(2,20,1) y1 = x*x y2 = np.log(x) plt.plot(x,y1) plt.twinx() plt.plot(x,y2,'r') plt.show()

    面向对象方式

    import matplotlib.pyplot as plt import numpy as np x = np.arange(2,20,1) y1 = x*x y2 = np.log(x) fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(x,y1) ax1.set_ylabel('Y1') ax2 = ax1.twinx() ax2.plot(x,y2,'r') ax2.set_ylabel('Y1') ax1.set_xlabel('conpare Y1 and Y2') plt.show()
    Processed: 0.010, SQL: 9