• Python大数据分析之数据可视化


    Jupyter Notebook是一种Web应用,能让用户将说明文本、数学方程、代码和可视化内容全部组合到一个易于共享的文档中。本文例子都是在Jupyter Notebook上完成,Anaconda3自带该工具,直接点击打开。

    启动后,在New下拉菜单中选择Python3,就会生成一个代码交互界面。

    matplotlib是最流行的用于绘制图表和其它二维数据可视化的Python库。它最初由John D.Hunter(JDH)创建,目前由一个庞大的开发人员团队维护。它非常适合创建出版物上用的图表。
    虽然还有其它的Python可视化库,matplotlib却是使用最广泛的,并且它和其它生态工具配合也非常完美。我认为,可以使用它作为默认的可视化工具。

    #初始配置
    import
    numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False import seaborn as sns import warnings; warnings.filterwarnings(action='once') large = 22; med = 16; small = 12 params = {'axes.titlesize': large, 'legend.fontsize': med, 'figure.figsize': (16, 10), 'axes.labelsize': med, 'axes.titlesize': med, 'xtick.labelsize': med, 'ytick.labelsize': med, 'figure.titlesize': large} plt.rcParams.update(params) plt.style.use('seaborn-whitegrid') sns.set_style("white") %matplotlib inline print(mpl.__version__) print(sns.__version__)

     1、画一个圆

    import matplotlib.pyplot as plt
    #用来正常显示中文
    plt.rcParams['font.sans-serif']=['SimHei']
    #用来正常显示负号
    plt.rcParams['axes.unicode_minus']=False
    import numpy as np
    from matplotlib.font_manager import FontProperties
    #设置字体为宋体
    font =FontProperties(fname="C:/Windows/Fonts/simsun.ttc",size=14)
    #在Jupyter中显示图像
    %matplotlib inline
    %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.xlabel("正弦",fontproperties=font)
    plt.ylabel("余弦",fontproperties=font)
    plt.title("一个圆形",fontproperties=font)
    #显示图像
    plt.show()

     2、点、线图

    #绘制点图或线图
    import numpy as np
    import matplotlib.pyplot as plt
    #生成X
    x1=np.linspace(0.0,5.0)
    x2=np.linspace(0.0,2.0)
    #生成Y
    y1=np.cos(2*np.pi*x1)*np.exp(-x1)
    y2=np.cos(2*np.pi*x2)
    #绘制第一个子图,2表示整个绘图区域分成2行,第一个1表示整个绘图区域分成1列,
    #第二个1表示子图的位置在左上(从左到右,从上到下的顺序对每个子区域进行编号)
    plt.subplot(2,1,1)
    #x1表示x轴数据,y1表示y轴数据,yo-表示曲线格式
    plt.plot(x1,y1,'yo-')
    plt.title('A tale of 2 subplots')
    plt.ylabel('Damped oscillation')
    #绘制第二个子图
    plt.subplot(2,1,2)
    plt.plot(x2,y2,'r.-')
    plt.xlabel('time (s)')
    plt.ylabel('Undamped')
    plt.show()

     3、直方图

    #绘制直方图
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import norm

    mu=100 #分布均值
    sigma=15 #分布标准差
    x=mu+sigma*np.random.randn(10000)
    print("x:",x.shape)

    #直方图的条数
    num_bins =50
    #绘制直方图,x是直方图的一维数组,bins柱数,density向量是否归一化,alpha透明度
    #n是直方图向量,bins返回各个bin的区间范围,patche返回没个bin里包含的数据的list
    n,bins,patche=plt.hist(x,bins=num_bins,density=1,color='b',alpha=0.5)

    #添加一个最佳拟合和曲线
    #pdf(x,mu,sigma)返回参数为mu和sigma的正太分布密度函数在x处的值
    y=norm.pdf(bins,mu,sigma)

    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: ",bins)

     4、等值线图

    #绘制三维图像
    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() #返回一维数组
    y=Y.flatten()
    z=Z.flatten()
    fig=plt.figure(figsize=(12,6)) #figsize设定图片宽高
    #cmap指颜色,jet表示蓝-青-黄-红
    ax1=fig.add_subplot(121,projection='3d')
    ax1.plot_trisurf(x,y,z,cmap=cm.jet, linewidth=0.01)
    plt.title("3D")
    ax2=fig.add_subplot(122)
    #15表示显示等高线的密集程度,数据越大画的等高线越多
    cs=ax2.contour(X,Y,Z,15,cmap='jet')
    ax2.clabel(cs,inline=True,fontsize=10,fmt='%1.1f')
    plt.title("Contour")
    plt.show()

     4、三维曲面图

    #绘制三维图像+各个轴的投影等高线
    from matplotlib import cm
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import axes3d

    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、条形图

    #绘制条形图
    import matplotlib.pyplot as plt
    import numpy as np
    #生成数据
    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()
    #生成0,1,2,3,……
    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'] #颜色
    #0.1代表第二个块从圆中分离出来
    explode=(0,0.1,0,0)
    #绘制
    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
    #导入数据
    df_data=pd.read_csv('D:iris.csv')
    df_data.head()
    #作图
    fig,ax=plt.subplots()
    #设置气泡图颜色,颜色数组大小必须跟df_data数组大小一致
    colors= np.random.rand(df_data['SepalLength'].size)
    #创建气泡图SepalLength为x,SepalWidth为y
    ax.scatter(df_data['SepalLength'],df_data['SepalWidth'],
    s=df_data['PetalLength']*100, #设置气泡的大小
    c=colors,alpha=0.6) #设置颜色透明度
    ax.set_xlabel('SepalLength(cm)')
    ax.set_ylabel('SepalWidth(cm)')
    ax.set_title('PetalLength(cm)*100')
    #显示网格
    ax.grid(True)
    fig.tight_layout()
    plt.show()

    8、图形灰化

    from PIL import Image
    #读取图片文件
    pil_im=Image.open(r'd:1.png')
    #转化为灰度图
    Pil_im=pil_im.convert('L')
    Pil_im

     待续……

    初始配置:

  • 相关阅读:
    html5标签---不常用新标签的整理
    拖拽demo--兼容--全局捕获
    Linux now!--网络配置
    windows下 memcached 和 redis 服务器安装
    MySQL5.6安装步骤(windows7/8_64位)
    zend 环境
    mysql自增id超大问题查询
    烦人的运营后台导出大批量数据
    kafka环境搭建和使用(python API)
    分布式系统中zookeeper实现配置管理+集群管理
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/12015522.html
Copyright © 2020-2023  润新知