Matplotlib学习笔记

Matplotlib是一个著名的库,用于在Python中绘制图表。

pyplot是Matplotlib的子集,用于绘制2D图表。其中,plot()画图函数,用它可以绘制点和线。

示例代码:

# 导入matplotlib包
import matplotlib.pyplot as plt
import numpy as np

#plot()画图方法
def testPlot():
    """
    plot()画图函数,是绘制二维图形的最基本函数,用它可以绘制点和线。

    语法格式如下:
        # 画单条线
        plot([x], y, [fmt], *, data=None, **kwargs)
        # 画多条线
        plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

    参数说明:
        x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以列表或数组,只能是秩为1的数组。
        fmt:可选,定义基本格式(如颜色、标记和线条样式)。多条曲线不指定颜色时,会自动选择不同颜色。
             颜色字符:'b' 蓝色,'m' 洋红色,'g' 绿色,'y' 黄色,'r' 红色,'k' 黑色,'w' 白色,'c' 青绿色,'#008000' RGB 颜色符串。
             线型参数:'‐' 实线,'‐‐' 破折线,'‐.' 点划线,':' 虚线。
             标记字符:'.' 点标记,',' 像素标记(极小点),'o' 实心圈标记,'v' 倒三角标记,'^' 上三角标记,'>' 右三角标记,'<' 左三角标记...等等。
        **kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。
    """
    # Matplotlib默认情况不支持中文,添加仿宋字体
    plt.rcParams['font.family'] = ['STFangsong']

    # 构建4个坐标点
    Xpoints = np.array([0,4])
    Ypoints = np.array([0,8])
    XXpoints = np.array([0, 4])
    YYpoints = np.array([0, 4])

    # 绘制图形:通过两个坐标 (0,0) 到 (4,8) 来绘制一条线,颜色红色.
    plt.plot(Xpoints,Ypoints,"r",label = "(1)班成绩") # 参数label=''传入字符串类型的值,也就是图例的名称
    # 绘制图形:通过两个坐标 (0,4) 到 (0,4) 来绘制一条线,颜色蓝色.
    plt.plot(XXpoints, YYpoints, "b", label="(2)班成绩") # 参数label,设置图例的名称
    # 设置横轴和纵轴标签
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    # 设置标题
    plt.title("学生期中考试成绩")

    # 添加图例
    legend = plt.legend(loc='upper left',shadow = True) # shadow设置图例背景为灰色
    frame = legend.get_frame() # 获得图例背景
    frame.set_facecolor("0.9") # 设置图例背景透明度

    # 通过4个坐标,绘制2条线
    plt.plot(Xpoints,Ypoints,XXpoints,YYpoints)

    # 通过2个坐标 (0,0) 到 (4,8) 来绘制2个点,颜色绿色.
    plt.plot(Xpoints,Ypoints,"g.")

    # 可以绘制任意数量的点,只需确保两个轴上的点数相同即可。
    XXXpoints = np.array([1, 2, 6, 8])
    YYYpoints = np.array([3, 8, 1, 10])
    plt.plot(XXXpoints, YYYpoints)

    # 如果不指定 x 轴上的点,则x会根据y的值来设置为 0, 1, 2, 3..N-1。
    plt.plot(YYYpoints)

    # 绘制正弦和余弦图
    x = np.arange(0, 4 * np.pi, 0.1)  # start,stop,step
    y = np.sin(x)
    z = np.cos(x)
    plt.plot(x, y, x, z)

    # 展示图形
    plt.show()

设置图例

第一步:给plt.plot( )中参数label=’'传入字符串类型的值,也就是图例的名称

第二步:使用plt.legend( )使上述代码产生效果

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

n = np.linspace(-5, 4, 30)
m1 = 3 * n + 2
m2 = n ** 2

plt.xlabel('时间')
plt.ylabel('心情')

plt.plot(n, m1, color='r', linewidth=1.5, linestyle='-', label='女生购物欲望')
plt.plot(n, m2, 'b', label='男生购物欲望')
plt.legend()

plt.show()

在这里插入图片描述
图片读取与展示

import matplotlib.image as mpimg

# python中图片读取与展示
def testImshow():
    """
    plt.waitforbuttonpress()
       等待用户输入,
       如果键被按下则返回True,关闭图片
       如果鼠标按钮被按下则返回False,最小化图片
       如果在超时秒内没有输入则返回None。 负值使超时失效。
    """
    # 读取图片:将图片转换为数组
    img = mpimg.imread("孩童.jpg") # 读出来的值为0-1

    # 获取img数组的维度
    print(img.shape) # (436, 600, 3) 图片的像素是436*600

    # 展示图片:将数组转换为图片
    plt.imshow(img)

    # 用于阻止与图形交互的调用
    plt.waitforbuttonpress()

使用scatter()函数绘制散点图

# 绘制散点图
def testScatter():
    """
    我们可以使用 pyplot 中的 scatter() 方法来绘制散点图。

    scatter() 方法语法格式如下:

        pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None,vmax=None,
        alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

    参数说明:

        x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。

        s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。

        c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。

        marker:点的样式,默认小圆圈 'o'。

        cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。

        norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。

        vmin,vmax::亮度设置,在 norm 参数存在时会忽略。

        alpha::透明度设置,0-1 之间,默认 None,即不透明。

        linewidths::标记点的长度。

        edgecolors::颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。

        plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。

        **kwargs::其他参数。

    """
    # Matplotlib默认情况不支持中文,添加仿宋字体
    plt.rcParams['font.family'] = ['STFangsong']

    # 构建数组
    a = np.arange(1,11)
    b = np.arange(12,22)

    # 调用scatter()方法绘制散点图
    plt.scatter(a,b,s=40,c="y",cmap=plt.cm.Spectral,alpha=0.5)

    # 添加标题
    plt.title("散点图")
    # 显示颜色条
    plt.colorbar()

    # 显示图形
    plt.show()

运行效果:
在这里插入图片描述
使用grid()设置图表中的网格线

# meshgrid()生成网格点的坐标矩阵
def testMeshgrid():
    """

    使用grid()方法设置图表中的网格线,生成网格点坐标矩阵

    语法格式:
        matplotlib.pyplot.grid(b=None, which='major', axis='both', )

    参数说明:
        b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
        which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
        axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
        **kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。

    """
    # 创建坐标点数据
    Xpoints = np.array([1, 2, 3, 4, 5])
    Ypoints = np.array([1, 2, 3, 4, 5])
    # 调用画图方法
    plt.plot(Xpoints, Ypoints, "r.", linestyle='')
    # 设置图表中的网格线
    plt.grid(True)
    # 显示图片
    plt.show()

    """
    
    使用meshgrid()方法生成网格点的坐标矩阵,
    即从坐标向量中返回坐标矩阵
    
    语法格式:
        X,Y = numpy.meshgrid(x, y)
        输入的x,y,就是网格点的横纵坐标列向量(非矩阵)
        输出的X,Y,就是坐标矩阵
        
    """

    YYpoints = np.array([1, 2, 3])
    # 从坐标向量中返回坐标矩阵
    X, Y = np.meshgrid(Xpoints,  YYpoints )
    # 调用画图方法
    plt.plot(X, Y, "r.", linestyle='')  # 线型为空,也即点与点之间不用线连接
    # 设置图表中的网格线
    plt.grid(True)
    # 显示图片
    plt.show() # 5 * 3 = 15个

使用 subplot()方法来绘制多个子图

# subplot()方法来绘制多个子图
def testSubplotS():
    """
    描述:
       使用 subplot()方法来绘制多个子图。

       subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。

    语法:
        subplot(nrows, ncols, index, **kwargs)
        subplot(pos, **kwargs)
        subplot(**kwargs)
        subplot(ax)
        以上函数将整个绘图区域分成 nrows 行和 ncols 列,
        然后从左到右,从上到下的顺序对每个子区域进行编号 1...N ,
        左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。

   设置 numRows = 1,numCols = 2,就是将图表绘制成 1x2 的图片区域,
   对应的坐标为:(1, 1), (1, 2)

    plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
    plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。

    """

    # plot 1:
    xpoints = np.array([0, 6])
    ypoints = np.array([0, 100])
    # subplot() 方法在绘图时需要指定位置
    plt.subplot(1, 2, 1)
    plt.plot(xpoints, ypoints)
    plt.title("plot 1")

    # plot 2:
    x = np.array([1, 2, 3, 4])
    y = np.array([1, 4, 9, 16])
    # subplot() 方法在绘图时需要指定位置
    plt.subplot(1, 2, 2)
    plt.plot(x, y)
    plt.title("plot 2")

    # 总标题
    plt.suptitle("RUNOOB subplot Test")
    plt.show() # 设置多个子图,只显示一次

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值