matplotlib快速入门(2)

CSDN博客:皮乾东
知乎:Htrying
微博:Htring的微博
微信公众号:自然语言处理爱好者(ID:NLP_lover)

简介

上一篇文档https://blog.csdn.net/meiqi0538/article/details/81266235已经初步介绍了如何使用matplotlib的使用了,现在根据案例做进一步的介绍。

程序

以下以案例的形式进行介绍:

import numpy as np
import matplotlib.pyplot as plt
#引入绘制热图的模块(上色)
from matplotlib import cm
#绘制3D图
from mpl_toolkits.mplot3d import Axes3D

def main():
    #子图绘制
    #创建图形对象
    fig=plt.figure()
    #绘制散点图,scatter
    #3行3列的第一个位置添加图形内容
    ax=fig.add_subplot(3,3,1)
    #随机数的个数
    n=128
    #生成随机数n个(0,1)
    X=np.random.normal(0,1,n)
    Y=np.random.normal(0,1,n)
    #arctan^2(Y/x)
    T=np.arctan2(Y,X)
    #在对象ax中,用来画散点的;s:点的大小;c:颜色r;alpha:透明度
    ax.scatter(X, Y,s=75,c=T,alpha=.5)
    #指定x,y的范围,并把ticks设为空
    plt.xlim(-1.5,1.5),plt.xticks([])
    plt.ylim(-1.5,1.5),plt.yticks([])
    #设置标题
    plt.title("scatter")
    #设置x,y的标签
    plt.xlabel("x")
    plt.ylabel("y")
    #绘制柱形图bar
    #在在三行三列的第二个位置添加图形
    ax=fig.add_subplot(332)
    #定义10个点
    n=10
    #构建一个从0到9的数列
    X=np.arange(n)
    #营造出一种变化的效果(随机数是:n个0.5-1.0的数字)
    Y1=(1-X/float(n))*np.random.uniform(0.5, 1.0, n)
    Y2=(1-X/float(n))*np.random.uniform(0.5, 1.0, n)
    #开始绘图
    #y1放在上面,y2放在下面,显示颜色facecolor,边缘颜色:edgecolor
    ax.bar(X,+Y1,facecolor="#9999ff",edgecolor="white")
    ax.bar(X,-Y2,facecolor="#ff9999",edgecolor="white")
    #添加柱状图数字,ha显示在柱状图上的位置,va:数字显示在柱状图上面,还是下面
    for x,y in zip(X,Y1):
        plt.text(x+0.4, y+0.05, "%.2f"%y,ha="center",va="bottom")

    for x,y in zip(X,Y2):
        plt.text(x+0.4, -y-0.05, "%.2f"%y,ha="center",va="top")

    #饼状图Pie
    ax=fig.add_subplot(333)
    #20个元素
    n=20
    #定义全1的变量
    Z=np.ones(n)
    #把最后一个变量设为2
    Z[-1]=2
    #画图,参数:传进的数组;explode:每个扇形离中心的距离;colors:设置颜色(每一个都有不同的颜色)这里用的灰度颜色,也可以使用rgb;
    #labels:标签
    plt.pie(Z,explode=Z*.05,colors=["%f"%(i/float(n)) for i in range(n)],labels=["%.2f"%(i/float(n)) for i in range(n)])
    #画出一个圆形,并不是一个椭圆
    plt.gca().set_aspect('equal')
    #设置x,yticks为空
    plt.xticks([]),plt.yticks([])
    #绘制极坐标polar
    #添加子图
    ax=fig.add_subplot(334,polar=True)
    #定义20个点
    n=20
    #生成极坐标变量的序列
    theta=np.arange(0.0,2*np.pi,2*np.pi/n)
    #生成随机的半径
    radii=10*np.random.rand(n)
    #绘图
    plt.plot(theta,radii) #也可以使用:plt.polar(theta,radii)
    #绘制热图
    ax=fig.add_subplot(335)
    #生成3*3的随机数
    data=np.random.rand(3,3)
    #蓝色系
    cmap=cm.Blues
    #绘图,数据data;interpolation:插值,使用最近的方法(nearest);指定cmap=cmap;aspect:指定尺寸,缩放(为auto)
    #vmin指定cm中最小值为0,最大值是1
    map=plt.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=0,vmax=1)
    #绘制3D图
    #添加子图,为3d
    ax=fig.add_subplot(336,projection="3d") 
    #在3d图中画点,坐标,s:size(尺寸)
    ax.scatter(1,1,3,s=100)
    #绘制热力图 hot map(可以联想等高图)
    #添加子图
    ax=fig.add_subplot(337) #设置横跨三个的图:fig.add_subplot(313)
    def f(x,y):
        return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
    #生成256个点
    n=256
    x=np.linspace(-3,3,n)
    y=np.linspace(-3,3,n)
    #需要解释以下np.meshgrid函数的作用:生成两个数组,第一个是把x复制y的长度个,第二个是把y的每一个元素复制成x的长度个,组成一个新的序列
    #读者可以通过测试查看
    #import numpy as np 
    #x=np.linspace(1, 5,5)
    # y=np.linspace(1, 5,6)
    # print(np.meshgrid(x,y))
    X,Y=np.meshgrid(x,y)

    plt.contourf(X,Y,f(X, Y),8,alpha=0.75,cmap=plt.cm.hot)
    #保存图像
    plt.savefig("mat.png")
    #显示
    plt.show()

if __name__ == '__main__':
    main()

效果:

这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/81273651