Matplotlib简单的使用

Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等

更多的使用方法,请查看官方文档
如果不想看英文也可以去看菜鸟教程matplotlib

简单的图形示例

更多的示例,请看官方demo

plot: 将 y 与 x 绘制为线或标记等

格式:

# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

参数说明:

x, y:点或线的节点,xx 轴数据,yy 轴数据,数据可以列表或数组
fmt:可选,定义基本格式(如颜色、标记和线条样式)
**kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等

颜色字符:

  • 'b'蓝色
  • 'm' 洋红色
  • 'g' 绿色
  • 'y'黄色
  • 'r' 红色
  • 'k' 黑色
  • 'w' 白色
  • 'c' 青绿色
  • '#008000' RGB 颜色符串。多条曲线不指定颜色时,会自动选择不同颜色。

线型参数:

  • '‐' 实线
  • '‐‐' 破折线
  • '‐.' 点划线
  • ':' 虚线。

标记字符:

  • '.' 点标记

  • ',' 像素标记(极小点)

  • 'o' 实心圈标记

  • 'v' 倒三角标记

  • '^' 上三角标记

  • '>' 右三角标记

  • '<' 左三角标记…等等

单条线-示例1:
# 单条线
x = np.array([0, 6])
y = np.array([0, 100])
plt.plot(x, y)
plt.show()

结果:

多条线-示例2:
# 多条线
x = np.arange(0, 4 * np.pi, 0.1)
y = np.sin(x)
z = np.cos(x)
plt.plot(x, y, x, z)
plt.show()

结果:

在这里插入图片描述

绘图标记-示例3:
"""
    绘图标记:marker
    详细的定义符号:https://www.runoob.com/matplotlib/matplotlib-marker.html
    支持自定义标记的大小等:
    markersize,简写为 ms:定义标记的大小。
    markerfacecolor,简写为 mfc:定义标记内部的颜色。
    markeredgecolor,简写为 mec:定义标记边框的颜色。
    eg: plt.plot(y, marker='v', ms=20)
"""
y = np.array([1, 3, 4, 5, 8, 9, 6, 1, 3, 4, 5, 2, 4])
plt.plot(y, marker="v")
plt.show()

结果:

在这里插入图片描述

fmt参数-示例4:
"""
    fmt参数:格式fmt = '[marker][line][color]'
"""
y = np.array([6, 2, 13, 10])
# o 表示实心圆标记,: 表示虚线,r 表示颜色为红色
plt.plot(y, 'o:r')
plt.show()

结果:

在这里插入图片描述

绘图线参数-示例5:
"""
    绘图线参数:
    ls: 线的类型可以使用 linestyle 参数来定义,简写为 ls
    c:线的颜色可以使用 color 参数来定义,简写为 c
    lw: 线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等
    线的类型,参考:https://www.runoob.com/matplotlib/matplotlib-line.html
"""
y = np.array([6, 2, 13, 10])

plt.plot(y, ls="dotted")
plt.show()

结果:

在这里插入图片描述

轴标签与标题-示例6:
"""
    轴标签和标题
"""
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)

# 轴标签
plt.xlabel("x - label")
plt.ylabel("y - label")

# 标题
plt.title("hello wrold")

plt.show()

结果:

在这里插入图片描述

网格线-示例7:
"""
    网格线,语法: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,分别表示网格线的颜色,样式和宽度。
"""
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])

plt.title("Hello grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)
plt.grid(color='r', linestyle='--', linewidth=0.5)
plt.show()

结果:

在这里插入图片描述

绘制多图-示例8:
"""
    绘制多图
    subpot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个
"""
# plot 1:
x1 = np.array([0, 6])
y1 = np.array([0, 100])

plt.subplot(1, 2, 1)
plt.plot(x1, y1)
plt.title("plot 1")

# plot 2:
x2 = np.array([1, 2, 3, 4])
y2 = np.array([1, 4, 9, 16])

plt.subplot(1, 2, 2)
plt.plot(x2, y2)
plt.title("plot 2")

plt.suptitle("Hello subplot Test")
plt.show()

结果:

在这里插入图片描述

柱形图-示例9:
"""
    柱形图bar,语法:matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
    参数说明:
        x:浮点型数组,柱形图的 x 轴数据。
        height:浮点型数组,柱形图的高度。
        width:浮点型数组,柱形图的宽度。
        bottom:浮点型数组,底座的 y 坐标,默认 0。
        align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
        **kwargs::其他参数。
"""
x = np.array(["hello-1", "hello-2", "hello-3", "C-hello"])
y = np.array([12, 22, 6, 18])

x1 = x
y1 = y

x2 = x
y2 = y

plt.subplot(1, 3, 1)
# 水平, bar() 方法使用 width 设置
plt.bar(x, y, color="#4CAF50", width=0.3)
plt.title("level")

plt.subplot(1, 3, 2)
# 垂直, barh() 方法使用 height 设置 height
plt.barh(x1, y1, height=0.1, color="#34FC34")
plt.title("vertical")

# 自定义各个柱形的颜色
plt.subplot(1, 3, 3)
plt.title("multi color")
plt.bar(x2, y2, color=["#4CAF50", "red", "hotpink", "#556B2F"], width=0.3)

plt.show()

结果:

在这里插入图片描述

饼图-示例10:
"""
    饼图:  pie()
    语法:matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]

    参数说明:
    x:浮点型数组,表示每个扇形的面积。
    explode:数组,表示各个扇形之间的间隔,默认值为0。
    labels:列表,各个扇形的标签,默认值为 None。
    colors:数组,表示各个扇形的颜色,默认值为 None。
    autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
    labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
    pctdistance:类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
    shadow:布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
    radius:设置饼图的半径,默认为 1。
    startangle:起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
    counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
    wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
    textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
    center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
    frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
    rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
"""
y = np.array([35, 25, 25, 15])

plt.pie(y,
        # 设置饼图标签
        labels=['A', 'B', 'C', 'D'],
        # 设置饼图颜色
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],
        # 第二部分突出显示,值越大,距离中心越远
        explode=(0, 0.2, 0, 0),
        # 格式化输出百分比
        autopct='%.2f%%',
        # 绘制带有表的轴框架
        frame=True,
       )
plt.title("bing tu")
plt.show()

结果:

在这里插入图片描述

散点图-示例11:
"""
    散点图:scatter
    语法:matplotlib.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::其他参数。
"""
# 打开窗口的尺寸,要放在最开头
plt.figure(figsize=(16, 9))

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

# 点的大小
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90])

# 点的颜色
colors = np.array(["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"])

plt.subplot(1, 4, 1)
plt.scatter(x, y, s=sizes, c=colors)
plt.title("scatter demo 1")

x1 = np.array([2, 4, 1, 5, 6, 9, 3])
y1 = np.array([2, 12, 3, 1, 8, 5, 32])
plt.subplot(1, 4, 2)
plt.scatter(x1, y1)
plt.title("scatter demo 2")

np.random.seed(13414)
N = 50
x3 = np.random.rand(N)
y3 = np.random.rand(N)
colors2 = np.random.rand(N)
area = (30 * np.random.rand(N)) ** 2  # 0 to 15 point radii
# 设置颜色及透明度
plt.subplot(1, 4, 3)
plt.scatter(x3, y3, s=area, c=colors2, alpha=0.5)
plt.title("scatter demo 3")

x4 = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y4 = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
colors4 = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.subplot(1, 4, 4)
# 颜色条参数值,参考:https://www.runoob.com/matplotlib/matplotlib-scatter.html
plt.scatter(x4, y4, c=colors4, cmap='viridis')
plt.title("scatter demo 4")

plt.colorbar()

plt.show()

结果:

在这里插入图片描述

完整代码
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np


def demo1():
    # 不指定 x 轴上的点,则 x 会根据 y 的值来设置为 0, 1, 2, 3..N-1
    x = np.array([0, 6])
    y = np.array([0, 100])
    plt.plot(x, y)
    plt.show()


def demo2():
    # start,stop,step
    x = np.arange(0, 4 * np.pi, 0.1)
    y = np.sin(x)
    z = np.cos(x)
    plt.plot(x, y, x, z)
    plt.show()


def demo3():
    """
    绘图标记:marker
    详细的定义符号:https://www.runoob.com/matplotlib/matplotlib-marker.html
    支持自定义标记的大小等:
    markersize,简写为 ms:定义标记的大小。
    markerfacecolor,简写为 mfc:定义标记内部的颜色。
    markeredgecolor,简写为 mec:定义标记边框的颜色。
    eg: plt.plot(y, marker='v', ms=20)
    """
    y = np.array([1, 3, 4, 5, 8, 9, 6, 1, 3, 4, 5, 2, 4])
    plt.plot(y, marker="v")
    plt.show()


def demo4():
    """
    fmt参数:格式fmt = '[marker][line][color]'
    """
    y = np.array([6, 2, 13, 10])
    # o 表示实心圆标记,: 表示虚线,r 表示颜色为红色
    plt.plot(y, 'o:r')
    plt.show()


def demo5():
    """
    绘图线参数:
    ls: 线的类型可以使用 linestyle 参数来定义,简写为 ls
    c:线的颜色可以使用 color 参数来定义,简写为 c
    lw: 线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等
    线的类型,参考:https://www.runoob.com/matplotlib/matplotlib-line.html
    """
    y = np.array([6, 2, 13, 10])

    plt.plot(y, ls="dotted")
    plt.show()


def demo6():
    """
    轴标签和标题
    """
    x = np.array([1, 2, 3, 4])
    y = np.array([1, 4, 9, 16])
    plt.plot(x, y)

    # 轴标签
    plt.xlabel("x - label")
    plt.ylabel("y - label")

    # 标题
    plt.title("hello wrold")

    plt.show()


def demo7():
    """
    网格线,语法: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,分别表示网格线的颜色,样式和宽度。
    """
    x = np.array([1, 2, 3, 4])
    y = np.array([1, 4, 9, 16])

    plt.title("Hello grid() Test")
    plt.xlabel("x - label")
    plt.ylabel("y - label")

    plt.plot(x, y)
    plt.grid(color='r', linestyle='--', linewidth=0.5)
    plt.show()


def demo8():
    """
    绘制多图
    subpot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个
    """
    # plot 1:
    x1 = np.array([0, 6])
    y1 = np.array([0, 100])

    plt.subplot(1, 2, 1)
    plt.plot(x1, y1)
    plt.title("plot 1")

    # plot 2:
    x2 = np.array([1, 2, 3, 4])
    y2 = np.array([1, 4, 9, 16])

    plt.subplot(1, 2, 2)
    plt.plot(x2, y2)
    plt.title("plot 2")

    plt.suptitle("Hello subplot Test")
    plt.show()


def demo9():
    """
    柱形图bar,语法:matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
    参数说明:
        x:浮点型数组,柱形图的 x 轴数据。
        height:浮点型数组,柱形图的高度。
        width:浮点型数组,柱形图的宽度。
        bottom:浮点型数组,底座的 y 坐标,默认 0。
        align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
        **kwargs::其他参数。
    """
    x = np.array(["hello-1", "hello-2", "hello-3", "C-hello"])
    y = np.array([12, 22, 6, 18])

    x1 = x
    y1 = y

    x2 = x
    y2 = y

    plt.subplot(1, 3, 1)
    # 水平, bar() 方法使用 width 设置
    plt.bar(x, y, color="#4CAF50", width=0.3)
    plt.title("level")

    plt.subplot(1, 3, 2)
    # 垂直, barh() 方法使用 height 设置 height
    plt.barh(x1, y1, height=0.1, color="#34FC34")
    plt.title("vertical")

    # 自定义各个柱形的颜色
    plt.subplot(1, 3, 3)
    plt.title("multi color")
    plt.bar(x2, y2, color=["#4CAF50", "red", "hotpink", "#556B2F"], width=0.3)

    plt.show()


def demo10():
    """
    饼图:  pie()
    语法:matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]

    参数说明:
    x:浮点型数组,表示每个扇形的面积。
    explode:数组,表示各个扇形之间的间隔,默认值为0。
    labels:列表,各个扇形的标签,默认值为 None。
    colors:数组,表示各个扇形的颜色,默认值为 None。
    autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
    labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
    pctdistance:类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
    shadow:布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
    radius:设置饼图的半径,默认为 1。
    startangle:起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
    counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
    wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
    textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
    center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
    frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
    rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
    """
    y = np.array([35, 25, 25, 15])

    plt.pie(y,
            # 设置饼图标签
            labels=['A', 'B', 'C', 'D'],
            # 设置饼图颜色
            colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"],
            # 第二部分突出显示,值越大,距离中心越远
            explode=(0, 0.2, 0, 0),
            # 格式化输出百分比
            autopct='%.2f%%',
            # 绘制带有表的轴框架
            frame=True,
            )
    plt.title("bing tu")
    plt.show()


def demo11():
    """
    散点图:scatter
    语法:matplotlib.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::其他参数。
    """
    # 打开窗口的尺寸,要放在最开头
    plt.figure(figsize=(16, 9))

    x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
    y = np.array([1, 4, 9, 16, 7, 11, 23, 18])

    # 点的大小
    sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90])

    # 点的颜色
    colors = np.array(["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"])

    plt.subplot(1, 4, 1)
    plt.scatter(x, y, s=sizes, c=colors)
    plt.title("scatter demo 1")

    x1 = np.array([2, 4, 1, 5, 6, 9, 3])
    y1 = np.array([2, 12, 3, 1, 8, 5, 32])
    plt.subplot(1, 4, 2)
    plt.scatter(x1, y1)
    plt.title("scatter demo 2")

    np.random.seed(13414)
    N = 50
    x3 = np.random.rand(N)
    y3 = np.random.rand(N)
    colors2 = np.random.rand(N)
    area = (30 * np.random.rand(N)) ** 2  # 0 to 15 point radii
    # 设置颜色及透明度
    plt.subplot(1, 4, 3)
    plt.scatter(x3, y3, s=area, c=colors2, alpha=0.5)
    plt.title("scatter demo 3")

    x4 = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
    y4 = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
    colors4 = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
    plt.subplot(1, 4, 4)
    # 颜色条参数值,参考:https://www.runoob.com/matplotlib/matplotlib-scatter.html
    plt.scatter(x4, y4, c=colors4, cmap='viridis')
    plt.title("scatter demo 4")

    plt.colorbar()

    plt.show()


if __name__ == '__main__':
    demo11()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值