zoukankan      html  css  js  c++  java
  • matplotlib基本使用(矩形图、饼图、热力图、3D图)

    使用matplotlib画简单的图形:

    #-*- coding:utf-8 -*-
    from numpy.random import randn
    import matplotlib.pyplot as plt
    
    fig=plt.figure()
    ax1=fig.add_subplot(2,2,1)
    plt.plot(randn(50).cumsum(),'k--')
    ax2=fig.add_subplot(2,2,2)
    #bins越大矩形越窄 alpha表示颜色深度
    ax2.hist(randn(10000), bins  = 30, color = 'red', alpha = 1)
    ax3=fig.add_subplot(2,2,3)
    plt.plot([1.5, 2, 4, -2, 1.6])
    plt.show()

    运行结果:

    散点图

    #-*- coding:utf-8 -*-
    from pylab import *
    import matplotlib.pyplot as plt
    
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    
    n = 1024
    X = np.random.normal(0,1,n)
    Y = np.random.normal(0,1,n)
    
    for i in range(1,10):
        scatter(i, i)
    plt.title(u"散点图",color='red')
    show()

    pyplot.subplots有几个选项
    nrows:subplot的行数
    ncols:subplot的列数
    sharex:所有subplot共享x轴刻度
    sharey:所有subplot共享Y轴刻度
    #-*- coding:utf-8 -*-
    from  numpy.random import randn
    from matplotlib import pyplot as plt
    
    fig,axes=plt.subplots(2,2,sharex=True,sharey=True)
    
    for i in range(2):
        for j in range(2):
            axes[i,j].hist(randn(50),bins=50,color='red',alpha=1)
    plt.show()

    矩阵图

    #-*- coding:utf-8 -*-
    from pylab import *
    
    #使用中文
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    #显示负号
    matplotlib.rcParams['axes.unicode_minus'] = False
    
    n=32
    list1=[i for i in range(1,33)]
    list2=[i for i in range(-32,0)]
    n= np.arange(n)
    xlim(-1,32)
    ylim(-35,35)
    xlabel(u'每个城市招聘人数')
    bar(n, list1, facecolor='yellow', edgecolor='white')
    bar(n, list2, facecolor='red', edgecolor='white')
    for x,y in zip(n,list1):
        text(x, y, '%d' % y, ha='center', va= 'bottom' )
    for x,y in zip(n,list2):
        text(x, y-3, '%d' % y, ha='center', va= 'bottom')
    show()

    饼图

    # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'  # 设置标签
    sizes = [15, 30, 45, 10]  # 占比,和为100
    colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']  # 颜色
    explode = (0, 0.1, 0, 0)  # 展开第二个扇形,即Hogs,间距为0.1
    
    plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True,
            startangle=90)  # startangle控制饼状图的旋转方向
    plt.axis('equal')  # 保证饼状图是正圆,否则会有一点角度偏斜
    
    plt.show()

    # -*- coding: utf-8 -*-
    import matplotlib.pyplot as plt
    import numpy as np
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'  # 设置标签
    colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']  # 颜色
    explode = (0.1, 0.2, 0, 0)  # 展开第二个扇形,即Hogs,间距为0.1
    
    fig = plt.figure()
    ax = fig.gca()
    
    ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True,
           startangle=90, radius=0.25, center=(0, 0), frame=True)
    ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True,
           startangle=90, radius=0.25, center=(1, 1), frame=True)
    ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True,
           startangle=90, radius=0.25, center=(0, 1), frame=True)
    ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True,
           startangle=90, radius=0.25, center=(1, 0), frame=True)
    
    ax.set_xticks([0, 1])  # 设置位置
    ax.set_yticks([0, 1])
    ax.set_xticklabels(["Sunny", "Cloudy"])  # 设置标签
    ax.set_yticklabels(["Dry", "Rainy"])
    ax.set_xlim((-0.5, 1.5))
    ax.set_ylim((-0.5, 1.5))
    
    ax.set_aspect('equal')
    plt.show()

    热力图

    #-*- coding:utf-8 -*-
    from pylab import *
    
    def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
    
    n = 256
    x = np.linspace(-3,3,n)
    y = np.linspace(-3,3,n)
    X,Y = np.meshgrid(x,y)
    
    contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet')
    C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5)
    show()

    利用numpy来实现sin函数

    #-*- coding:utf-8 -*-
    from pylab import *
    
    #使用中文
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    #显示负号
    matplotlib.rcParams['axes.unicode_minus'] = False
    
    t=np.arange(0.0,2.0,0.01)#0到2之间,以0.01为间距
    s=np.sin(2*np.pi*t)#利用numpy实现2sinπx
    plt.plot(t,s)
    plt.xlabel('t的值')
    plt.ylabel('s的值')
    #这里同时可以使用plt.xlim()和plt.ylim()来限制x、y轴的范围
    plt.show()

    #-*- coding:utf-8 -*-
    from pylab import *
    
    #使用中文
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    #显示负号
    matplotlib.rcParams['axes.unicode_minus'] = False
    
    x1=np.linspace(0.0,5.0)
    x2=np.linspace(0.0,2.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,'y*-')#y表示颜色,*表示点的样子,-表示连接
    plt.title('图1')
    
    plt.subplot(2,1,2)#最后一个2表示在第二个位置
    plt.plot(x1,y2,'r.--')
    plt.title('图2')
    
    plt.show()

    #-*- coding:utf-8 -*-
    from pylab import *
    
    #使用中文
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    #显示负号
    matplotlib.rcParams['axes.unicode_minus'] = False
    
    mu=1000
    sigma=15
    x=mu+sigma*np.random.randn(10000)#在均值周围产生符合正态分布x值
    
    num_bins=50
    n,bins,patches=plt.hist(x,num_bins,normed=1,facecolor='green',alpha=0.5)
    #直方图函数,x为x轴的值,normed=1表示为概率密度,即和为一,绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象
    y=mlab.normpdf(bins,mu,sigma)#画一条逼近的曲线
    plt.plot(bins,y,'r--')
    plt.xlabel('Smarts')
    plt.ylabel('Probability')
    plt.title(r'Histogram of IQ: $mu=100$, $sigma=15$')
    
    plt.subplots_adjust(left=0.15)
    plt.show()

    # -*- coding:utf-8 -*-
    from pylab import *
    from mpl_toolkits.mplot3d import Axes3D
    
    x_list = [[3, 3, 2], [4, 3, 1], [1, 2, 3], [1, 1, 2], [2, 1, 2]]
    fig = plt.figure()
    ax = Axes3D(fig)
    for x in x_list:
        ax.scatter(x[0], x[1], x[2], c='r')
    plt.show()

    from pylab import *
    from mpl_toolkits.mplot3d import Axes3D
    
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection='3d')
    X = np.arange(1, 10, 1)
    Y = np.arange(1, 10, 1)
    X, Y = np.meshgrid(X, Y)
    Z = 3 * X + 2 * Y + 30
    surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=0, antialiased=True)
    ax.set_zlim3d(0,100)
    fig.colorbar(surf, shrink=0.5, aspect=5)
    plt.show()

    # -*- coding:utf-8 -*-
    from mpl_toolkits.mplot3d import Axes3D
    from matplotlib import cm
    from matplotlib.ticker import LinearLocator, FormatStrFormatter
    import matplotlib.pyplot as plt
    import numpy as np

    fig = plt.figure()
    ax = fig.gca(projection='3d')
    X = np.arange(-5, 5, 0.1)
    Y = np.arange(-5, 5, 0.1)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X ** 2 + Y ** 2)
    Z = np.sin(R)
    surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
    # 画表面,x,y,z坐标, 横向步长,纵向步长,颜色,线宽,是否渐变
    ax.set_zlim(-1.01, 1.01) # 坐标系的下边界和上边界

    ax.zaxis.set_major_locator(LinearLocator(10)) # 设置Z轴标度
    ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # Z轴精度
    fig.colorbar(surf, shrink=0.5, aspect=5) # shrink颜色条伸缩比例(0-1),aspect颜色条宽度(反比例,数值越大宽度越窄)

    plt.show()

  • 相关阅读:
    java项目中ehcache缓存最简单用法
    最简单的freemarker用法实例
    java从包package中获取所有的Class
    java获取properties配置文件中某个属性最简单方法
    java去除字符串中的空格、回车、换行符、制表符
    java获取中文汉字的所有拼音
    运行时给java对象动态的属性赋值
    java中把文件拷贝到指定目录下最简单几种方法
    在Springmvc普通类@Autowired注入request为null解决方法
    java导入excel很完美的取值的方法
  • 原文地址:https://www.cnblogs.com/ybf-yyj/p/8044136.html
Copyright © 2011-2022 走看看