美文网首页
Python数据可视化

Python数据可视化

作者: Ly3911 | 来源:发表于2020-05-17 00:12 被阅读0次

    一、Matplotlib绘图
    1.点图、线图
    2.直方图
    3.等值线图
    4.三维曲面图
    5.条形图
    6.饼图
    7.气泡图(散点图)
    二、Seabon图例
    1.数据分布可视化
    2.线性相关图
    3.分类数据可视化
    三、Pandas可视化功能
    1.时间序列图(折线图)
    2.平行坐标图和安德鲁曲线

    实例

    # coding: utf-8
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    ##设置字体
    from matplotlib.font_manager import FontProperties
    font = {'family' : 'Times New Roman','weight' : 'normal','size'   : 23}
    ##Jupyter显示图像需要添加以下两句代码
    %matplotlib inline 
    ##在Jupyter嵌入显示
    %config InlineBackend.figure_format="retina"  
    ##在屏幕中显示高清图片
    
    ##绘制一个圆形散点图
    t=np.arange(1,10,0.05)
    x=np.sin(t)
    y=np.cos(t)
    ##定义一个窗口
    plt.figure(figsize=(8,5))
    ##绘制一条线
    plt.plot(x,y,"r-*")
    
    ##使坐标轴相等
    plt.axis("equal")
    plt.ylabel("sin")
    plt.xlabel("cos")
    plt.title("round")
    
    ##显示图像
    plt.show()
    

    1.点图、线图

    ##subplot()绘制多个子图
    import numpy as np
    import matplotlib.pyplot as plt
    
    x1=np.linspace(0.0,5.0)
    x2=np.linspace(0.0,5.0)
    
    y1=np.cos(2*np.pi*x1)*np.exp(-x1)
    y2=np.cos(2*np.pi*x2)
    
    ##绘制第一个子图
    plt.subplot(2,1,1)
    plt.plot(x1,y1,'yo-')
    plt.title('A tale of subplots')
    plt.ylabel('Damped oscillation')
    ##绘制第二个子图
    plt.subplot(2,1,2)
    plt.plot(x2,y2,'r.-')
    plt.xlabel('time(s)')
    plt.ylabel('Undamped')
    
    plt.show()
    
    

    一个Figure对象包含多个Axes(子图)
    subplot(numRows,numCols,plotNum)


    subplot(numRows,numCols,plotNum)
    ##plot函数调用方式如下
    plt.plot(x,y,format_string,**kwargs)
    参数说明:
       x表示x轴数据,列表/数组,可选,绘制多条曲线是各x参数不能省略;
       y表示y轴数据,列表/数组;
       format_string表示控制曲线的格式字符串;
        **kwargs表示第二组或更多(x,y,format_string)
    

    2.直方图

    ##直方图
    import numpy as np
    import matplotlib.mlab as mlab
    import matplotlib.pyplot as plt
    
    ##数据示例
    mu=100
    sigma=15
    x=mu+sigma*np.random.randn(10000)
    print("x:",x.shape)
    #获得一维正态分布数组
    
    ##直方图条数
    num_bins=50
    #绘制直方图
    n,bins,patches=plt.hist(x,num_bins,normed=1,facecolor='green',alpha=0.5)
    #添加一个最佳拟合的曲线
    y=mlab.normpdf(bins,mu,sigma) ##返回关于数据的pdf数值(概率密度函数)
    
    plt.plot(bins,y,'r--')
    plt.xlabel('Smarts')
    plt.ylabel('Probability')
    #在图中添加公式/字符需使用Latex语法$-$
    plt.title('Histogram of IQ:$\mu=100$,$\sigma=15$')
    #调整图像间距,防止y轴数值与label重合
    plt.subplots_adjust(left=0.15)
    plt.show()
    print("bind:\n",bins)
    
    正态分布直方图
    ##hist函数格式
    n,bins,patches=plt.hist(arr,bins=10,normed=0,facecolor='black',edgecolor='black',alpha=1,histtype='bar')
    参数说明:
     arr:直方图一维数组x
     bins:直方图柱数,默认10
     normed:是否将得到的直方图向量归一化,默认0
     facecolor:直方图颜色
     edgecolor:直方图边框颜色
     alpha:透明度
     histtype;直方图类型,有'bar','barstacked','step','stepfilled'几种
    返回值:
     n:直方图向量,是否归一化由normed设定
     bins:返回各bin的区间范围
     patches:返回每一个bin包含的数据,是个列表(list)
    

    3.等值线图
    相等数值点的连线表示连续分布且逐渐变化的数量特征,三维图像在二维上表示;

    ##matplotlib绘制三维曲线
    import numpy as np
    from matplotlib import cm
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    ##生成数据
    delta=0.2
    x=np.arange(-3,3,delta)
    y=np.arange(-3,3,delta)
    X,Y=np.meshgrid(x,y)
    Z=X**2+Y**2
    
    x=X.flatten() #返回一维数组,该函数只适用于numpy对象(array/mat)
    y=Y.flatten()
    z=Z.flatten()
    fig=plt.figure(figsize=(12,6))
    ax1=fig.add_subplot(121,projection='3d')
    ax1.plot_trisurf(x,y,z, cmap=cm.jet, linewidth=0.01) ##cmap指颜色,jet表示:蓝青黄红
    plt.title("3D")
    
    ax2=fig.add_subplot(122)
    cs=ax2.contour(X,Y,Z,15,cmap='jet',) #15表示等高线密度,数值越大,等高线数越多
    ax2.clabel(cs,inline=True,fontsize=10,fmt='%1.1f')
    plt.title("Contour")
    plt.show()
    

    4.三维曲面图

    ##三维曲面图+各轴的投影等高线
    from mpl_toolkits.mplot3d import axes3d
    import matplotlib.pyplot as plt
    from matplotlib import cm
    
    fig=plt.figure(figsize=(8,6))
    ax=fig.gca(projection='3d')
    
    ##生产三维数据
    X,Y,Z=axes3d.get_test_data(0.05)
    ax.plot_surface(X,Y,Z,rstride=8,cstride=8,alpha=0.3)
    cset=ax.contour(X,Y,Z,zdir='z',offset=-100,cmap=cm.coolwarm)
    cset=ax.contour(X,Y,Z,zdir='x',offset=-40,cmap=cm.coolwarm)
    cset=ax.contour(X,Y,Z,zdir='y',offset=40,cmap=cm.coolwarm)
    
    ax.set_xlabel('X')
    ax.set_xlim(-40,40)
    ax.set_ylabel('Y')
    ax.set_ylim(-40,40)
    ax.set_zlabel('Z')
    ax.set_zlim(-100,100)
    plt.show()
    

    5.条形图 Bar Chart

    ##条形图
    import numpy as np
    import matplotlib.pyplot as plt
    
    ##生成数据
    n_groups=5  ##组数
    
    ##平均分和标准差
    means_men=(20,35,30,35,27)
    std_men=(2,3,4,1,2)
    means_women=(25,32,34,20,25)
    std_women=(3,5,2,3,3)
    
    ##条形图
    fig,ax=plt.subplots()
    index=np.arange(n_groups)
    bar_width=0.35
    
    opacity=0.4 ##透明度
    error_config={'ecolor':'0.3'}
    ##第一类条形图
    rects1=plt.bar(index,means_men,bar_width,
                  alpha=opacity,
                  color='b',
                  yerr=std_men,
                  error_kw=error_config,
                  label='Men')
    ##第二类条形图
    rects2=plt.bar(index+bar_width,means_women,bar_width,
                  alpha=opacity,
                  color='r',
                  yerr=std_women,
                  error_kw=error_config,
                  label='Women')
    plt.xlabel('Group')
    plt.ylabel('Scores')
    plt.title('Scores by group and gender')
    plt.xticks(index+bar_width,('A','B','C','D','E'))
    plt.legend()
    ##自动调整subplot的参数指定的填充区
    plt.tight_layout()
    plt.show()
    

    6.饼图

    ##饼图
    import matplotlib.pyplot as plt
    
    ##切片按顺时针方向排列并绘制
    labels='Frogs','Hogs','Dogs','Logs' ##标注
    sizes=[15,30,45,10] ##大小
    colors=['yellowgreen','gold','lightskyblue','lightcoral'] ##颜色
    explode=(0,0.1,0,0) ##表示第二个块0.1从圆中分离
    ##绘制饼图
    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f%%',shadow=True,startangle=90)
    plt.axis('equal')
    plt.show()
    

    7.气泡图(散点图)

    ##气泡图
    import matplotlib.pyplot as plt
    import pandas as pd
    from sklearn.datasets import load_iris ##获取鸢尾花数据包
    
    ##导入数组
    iris=load_iris()
    iris
    df_data=pd.DataFrame(iris.data,columns=iris.feature_names)
    df_data['target']=iris.target
    df_data.head()
    
    ##作图
    fig,ax=plt.subplots()
    ##设置气泡颜色
    ##colors=["#FFFF01"]
    
    #创建气泡图SepalLength为x,SepalWidth为y,同时设置PetalLength为气泡大小,并设置颜色透明度
    ax.scatter(df_data['sepal length (cm)'],df_data['sepal width (cm)'],
               s=df_data['sepal length (cm)']*60,alpha=0.6) ##color=colors
    ax.set_xlabel('sepal length (cm)')
    ax.set_xlabel('sepal width (cm)')
    ax.set_title('sepal length (cm)*60')
    
    ##显示网格
    ax.grid(True)
    fig.tight_layout()
    plt.show()
    

    二、Seabon图例
    1.数据分布可视化

    ##准备工作
    import matplotlib.pyplot as plt
    import pandas as pd
    from sklearn.datasets import load_iris ##获取鸢尾花数据包
    
    ##数据转化为DataFrame
    iris=load_iris()
    df=pd.DataFrame(iris.data,columns=iris.feature_names)
    df['target']=iris.target
    
    ##数据可视化
    import numpy as np
    import pandas as pd
    from scipy import stats,integrate
    import matplotlib.pyplot as plt
    
    ##在Jupyter中显示图像
    %matplotlib inline 
    ##显示高清图片
    %config InlineBackend.figure_format='retina'
    import seaborn as sns
    sns.set(color_codes=True)
    df.head()
    
    ##1.直方图和密度函数
    ##distplot()函数默认绘出数据的直方图和核密度
    sns.distplot(df["petal length (cm)"],bins=15)
    plt.show()
    
    ##2.散点图和直方图
    ##jointplot()函数同时绘制散点图和直方图
    sns.jointplot(x="sepal length (cm)",y="sepal width (cm)",data=df,height=8)
    plt.show()
    
    ##3.分组散点图
    ##FacetGrid()标记不同种类
    sns.FacetGrid(df,hue='target',height=8).map(plt.scatter,"sepal length (cm)","sepal width (cm)").add_legend()
    
    ##4.六边形图
    sns.axes_style("white")
    sns.jointplot(x="sepal length (cm)",y="petal length (cm)",data=df,kind="hex",color="k")
    plt.show()
    
    ##5.二维核密度估计图
    g=sns.jointplot(x="sepal length (cm)",y="petal length (cm)",data=df,kind="kde",color="m")
    ##添加散点图
    g.plot_joint(plt.scatter,c="w",s=30,linewidth=1,marker="+")
    g.ax_joint.collections[0].set_alpha(0)
    
    ##6.1矩阵散点图-用于考察多个变量间相关关系,快速发现多个变量主要相关性
    g=sns.PairGrid(df)
    g.map(plt.scatter)
    
    ##6.2对角线绘制不同函数,显示单变量分布
    g=sns.PairGrid(df)
    g.map_diag(plt.hist)
    g.map_offdiag(plt.scatter)
    
    ##7.盒形图
    plt.figure(figsize=(8,6))
    sns.boxplot(x="target",y="sepal width (cm)",data=df)
    plt.title("Boxplot")
    plt.show()
    

    三、Pandas可视化功能

    1.时间序列图

    import matplotlib.pyplot as plt
    import pandas as pd
    import numpy as np
    ##1.1Pandas绘制折线图
    ts=pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000',periods=1000))
    ts=ts.cumsum()
    ts.plot()
    plt.show()
    
    ##1.2多条折线图
    ts2=pd.DataFrame(np.random.randn(1000,4),index=pd.date_range('1/1/2000',periods=1000),columns=list('ABCD'))
    ts2=ts2.cumsum()
    plt.figure()
    ts2.plot()
    plt.show()
    

    2.平行坐标图和安德鲁曲线

    ##数据源接上面鸢尾花数据
    from pandas.plotting import parallel_coordinates
    from pandas.plotting import andrews_curves
    
    ##parallel_coordinates 平行坐标图 对于高维几何和多元数据可视化
    plt.figure(figsize=(6,4))
    parallel_coordinates(df,"target")
    plt.title("parallel_coordinates")
    
    ##andrews_curves 安德鲁曲线 平滑版本平行坐标图 
    plt.figure(figsize=(6,4))
    andrews_curves(df,"target")
    plt.title("andrews_curves")
    plt.show()
    

    相关文章

      网友评论

          本文标题:Python数据可视化

          本文链接:https://www.haomeiwen.com/subject/crjanhtx.html