(二)matplotlib作图2.0:axes子图及多种图形绘制---子图(散点、直方、饼图、极坐标、3D图、热图、热力图)

基本思想

import matplotlib.pyplot as plt,则在matplotlib.pyplot里

plt.figure() 是一个空白的画板

画板上有轴、标题、标签等的集合axes,代表一个图的区域位置,集合元素包含基本的两个axis 坐标轴等

子图subplot实际上就是一个画布上有多个axes,多弄几个axes,再放到特定位置,就是子图sub了
在这里插入图片描述

基本操作

创建一个画板
fig = plt.figure()
添加子图(同时也相当于把画笔放到了这个子图):
fig.add_subplot(3,3,1) #(x,y,i)将画布分成x*y的块,这个图在第i个块上显示

案例代码

"""
matplotlib作图2.0:子图及多种图形绘制
马玉华   2019.10.20
"""
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

#使中文正常显示
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  #将默认字体font...改为黑体
matplotlib.rcParams['axes.unicode_minus'] = False    #有负号不正常显示,使负号不显示

def main():

    n = 4096
    x = np.random.randn(n)   #产生一个标准正态分布列表,128个元素
    y = np.random.randn(n)

    """scatter散点图"""
    fig = plt.figure()   #figure产生一个画板
    fig.add_subplot(3,3,1)  #(x,y,i)将画布分成x*y的块,这个图在第i个块上显示

    plt.scatter(x,y,color = 'r', alpha = 0.3)   #画图
    plt.xlim()   # x的显示范围,此处为全范围
    plt.ylim()   # y的显示范围
    plt.xticks([])   #不显示坐标值
    plt.yticks([])   #不显示坐标值

    """hist 直方图"""
    bins = [-3,-2.5,-2,-1.5,-1,-0.5,0,0.5,1,1.5,2,2.5,3]
    fig.add_subplot(3,3,2)   #切换到第二个模块上
    plt.hist(x,bins,edgecolor = 'black')

    """pie 饼图"""
    fig.add_subplot(3,3,3)   #切换到第三个模块上
    pie_list = np.array([1,1,0.3,1,1,2,3])  #此处产生列表还要用numpy,是因为在下一行中np产生的列表可以与float型数字进行乘法运算
    plt.pie(pie_list,explode = pie_list*0.05,labels = pie_list)   #explode=列表,扇形远离中心的距离:按顺序对应列表中的各个值。lables=列表,扇形的标签:按顺序显示对应列表中的内容

    """polar 极坐标"""
    fig.add_subplot(3,3,4,polar = True)   #切换到第四个图。 #画极坐标,设置polar=True
    n = 10
    theta = np.arange(0,2*np.pi,np.pi/n)  #角度  #生成列表,从0到2π,间隔为π/10。
    radii = np.random.rand(2*n)            #半径
    plt.polar(theta,radii)   #plt.plot(theta,radii),这句代替也可以

    """heatmap 热图"""
    fig.add_subplot(3,3,5)   #切换到第五个模块上

    data = np.random.rand(3,3)
    color_set = matplotlib.cm.Blues   #用来指定热图颜色
    plt.imshow(data,cmap = color_set)  #interpolation = 'nearest'为使用的插值法,用这一项的话图会有点像渐变的感觉。cmap = color_set为颜色的设定,在上一行中设定为了blue。aspect = 'auto'设为自动缩放

    """3D图"""
    import mpl_toolkits.mplot3d.axes3d
    fig.add_subplot(3,3,6, projection = '3d')
    plt.scatter(1,1,3)

    """hot 热力图"""
    fig.add_subplot(3,1,3)   #这样可在3×3大小的模块中,直接占满第三行的所有模块
    def hot_value(x,y):
        n=(x**5+y**3+x)*np.exp(x+y)
        return n
    dots = 256
    x = np.linspace(-3,3,dots)   #在[-3,3]内取dots个数
    y = np.linspace(-3,3,dots)
    X,Y = np.meshgrid(x,y)   # meshgrid()相当于画网格线,得到x,y网格线交叉的点,然后返回二位数组X,Y。X =[[x],[x],[x]...],y有多少网格线就有多少行。
    plt.contourf(X,Y,hot_value(X,Y),cmap = plt.cm.hot)

    # 为第一个画板的第一个区域添加标题
    fig.add_subplot(3,3,1).set_title("画板的第一个区域:散点图")
    fig.add_subplot(3,3,2).set_title("第二个区域")

    plt.savefig('matplotlib2.0图:子图(散点、直方、饼图、极坐标、3D图、热图、热力图)2.0.png')
    plt.show()




if __name__ == '__main__':
    main()

输出结果:
在这里插入图片描述
如果这里的np.meshgrid()有问题参照自己的博客https://blog.csdn.net/qq_43328166/article/details/102654373

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nutron-ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值