• 【使用matplotlib】使用统计函数绘制简单图形


    使用统计函数绘制简单图形

    1. 绘制简单图形

    1.1.1 函数简介

    1. bar(绘制柱形图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import random
    import string
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
        x = [i for i in range(1, 9)]
        y = [random.choice(x) for i in range(8)]
        plt.bar(x,
                y,
                align="center",
                color="c",
                tick_label=[random.choice(string.ascii_lowercase) for i in range(8)],
                hatch="/")
        plt.xlabel('箱子编号')
        plt.ylabel('箱子重量(kg)')
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    img

    matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.bar.html?highlight=bar#matplotlib.pyplot.bar

    制作条形图

    使用给定的 alignment 将条形定位在 x。 它们的尺寸由 heightwidth 给出。 垂直基线是 bottom(默认 0)。

    许多参数可以采用单个值应用于所有条形或一系列值,每个条形一个值。

    参数:

    x: float or array-like

    条形的 x 坐标。 另请参阅 align 以了解条形与坐标的对齐方式。

    height: float or array-like

    条的高度。

    width: float or array-like, default: 0.8

    条的宽度。

    bottom: float or array-like, default: 0

    条形底的 y 坐标。

    align: {'center', 'edge'}, default: 'center'

    条形图与 x 坐标的对齐:

    • ‘center’:以 x 位置为中心。
    • ‘edge’:将条形的左边缘与 x 位置对齐。

    要对齐右边缘的条形,请传递负 widthalign='edge'

    2. barh(绘制条形图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import random
    import string
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
        x = [i for i in range(1, 9)]
        y = [random.choice(x) for i in range(8)]
        plt.barh(x,
                 y,
                 align="center",
                 color="c",
                 tick_label=[random.choice(string.ascii_lowercase) for i in range(8)],
                 hatch="/")
        plt.xlabel('箱子重量(kg)')
        plt.ylabel('箱子编号')
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    img

    matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.barh.html

    3. hist(绘制直方图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
        box_weight = np.random.randint(0, 10, 100)
        x = box_weight
        bins = range(11)
        plt.hist(x,
                 bins=bins,
                 color="g",
                 histtype="bar",
                 rwidth=1,
                 alpha=0.6)
        plt.xlabel('箱子重量(kg)')
        plt.ylabel('销售数量')
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    img

    matplotlib.pyplot.hist(x, bins=None, range=None, density=False, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, *, data=None, **kwargs)

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.hist.html?highlight=hist#matplotlib.pyplot.hist

    绘制直方图。

    计算并绘制 x 的直方图。 返回值是一个元组 (n, bins, patches) 或 ([n0, n1, …], bins, [patches0, patches1, … .]) 如果输入包含多个数据。 请参阅 weights 参数的文档以绘制已分箱数据的直方图。

    多个数据可以通过 x 作为可能不同长度的数据集列表 ([x0, x1, …]) 提供,或者作为每列是一个数据集的 2D ndarray 提供。 请注意,ndarray 形式相对于列表形式进行了转置。

    不支持掩码数组。

    binsrangeweightsdensity 参数的行为类似于 [numpy.histogram](https://numpy.org/doc/stable/reference/generated/numpy.histogram.html #numpy.histogram)。

    参数:

    x: (n,) array or sequence of (n,) arrays

    输入值,这需要单个数组或不需要具有相同长度的数组序列。(这个数据是被统计频次的数据)

    bins: int or sequence or str, default: rcParams["hist.bins"] (default: 10)

    如果 bins 是一个整数,它定义了范围内等宽 bin 的数量。

    如果bins是一个序列,它定义了bin边缘,包括第一个bin的左边缘和最后一个bin的右边缘; 在这种情况下,bin 的间距可能不相等。 除了最后一个(最右边的)bin外,所有bin都是半开的(左开右闭的区间)。 换句话说,如果 bins 是:

    [1, 2, 3, 4]
    
    • 1

    那么第一个 bin 是 [1, 2)(包括 1,但不包括 2)和第二个 [2, 3)。 然而,最后一个 bin 是 [3, 4],它包括 4。

    如果 bins 是一个字符串,它是 numpy.histogram_bin_edges 支持的分箱策略之一 ): ‘auto’、‘fd’、‘doane’、‘scott’、‘stone’、‘rice’、‘sturges’ 或 ‘sqrt’。

    range: tuple or None, default: None

    bin 的下限和上限范围。 忽略上下异常值。 如果未提供,range(x.min(), x.max())。 如果 bins 是一个序列,则范围无效。

    如果 bins 是一个序列或指定了 range,则自动缩放基于指定的 bin 范围而不是 x 的范围。

    density: bool, default: False

    如果为True,则绘制并返回概率密度:每个 bin 将显示 bin 的原始计数除以计数总数 和 bin 宽度 (density = counts / (sum(counts) * np.diff(bins ))),使得直方图下的面积积分为 1 (np.sum(density * np.diff(bins)) == 1)。

    如果 stacked 也是 True,则直方图的总和归一化为 1。

    weights: (n,) array-like or None, default: None

    x 形状相同的权重数组。 x 中的每个值仅将其相关权重贡献给 bin 计数(而不是 1)。 如果 densityTrue,则权重被归一化,因此密度在该范围内的积分保持为 1。

    此参数可用于绘制已分箱数据的直方图,例如 使用 numpy.histogram (通过将每个 bin 视为单个点,其权重等于其 数数)

    counts, bins = np.histogram(data)
    plt.hist(bins[:-1], bins, weights=counts)
    
    • 1
    • 2

    (或者您也可以使用 bar())。

    cumulative: bool or -1, default: False

    如果True,则计算直方图,其中每个 bin 给出该 bin 中的计数加上所有 bin 的较小值。 最后一个 bin 给出了数据点的总数。

    如果 density 也是 True,则直方图被归一化,使得最后一个 bin 等于 1。

    如果 cumulative 是小于 0 的数字(例如 -1),则累积的方向相反。 在这种情况下,如果 density 也是 True,则直方图被归一化,使得第一个 bin 等于 1。

    bottom: array-like, scalar, or None, default: None

    每个箱子底部的位置,即。 bin 从 bottom 绘制到 bottom + hist(x, bins) 如果是标量,则每个 bin 的底部移动相同的量。 如果是数组,则每个 bin 都会独立移动,并且底部的长度必须与 bin 的数量相匹配。 如果没有,默认为 0。

    histtype: {'bar', 'barstacked', 'step', 'stepfilled'}, default: 'bar'

    • 要绘制的直方图类型。
      • bar 是传统的条形直方图。 如果给出多个数据,则条形图并排排列。
      • barstacked 是条形直方图,其中多个数据堆叠在一起。
      • step 生成默认未填充的线图。
      • stepfilled 生成一个默认填充的线图。

    align: {'left', 'mid', 'right'}, default: 'mid'

    • 直方图条的水平对齐方式。
      • ‘left’:条形图位于 bin 左侧边缘的中心。
      • ‘mid’:条在 bin 边缘之间居中。
      • ‘right’:条形图位于右侧 bin 边缘的中心。

    orientation: {'vertical', 'horizontal'}, default: 'vertical'

    如果是“水平”,则 barh 将用于 bar 类型 histograms 和 bottom kwarg 将是左边缘。

    rwidth: float or None, default: None

    条的相对宽度,作为 bin 宽度的一部分。 如果为“无”,则自动计算宽度。

    如果 histtype 是 ‘step’ 或 ‘stepfilled’ 则忽略。

    rwidth=0.8的效果

    img

    log: bool, default: False

    如果为True,直方图轴将设置为对数刻度。

    color: color or array-like of colors or None, default: None

    颜色或颜色序列,每个数据集一个。 默认 (None) 使用标准线条颜色序列。

    label: str or None, default: None

    字符串或字符串序列以匹配多个数据集。 条形图为每个数据集生成多个补丁,但只有第一个获得标签,因此 [legend](https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.legend.html#matplotlib. axes.Axes.legend) 将按预期工作。

    stacked: bool, default: False

    如果为True,则多个数据相互堆叠如果为False,则如果 histtypebar,则多个数据并排排列,如果 histtypestep,则多个数据相互叠加

    4. pie(绘制饼图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
    
        # 这个tuple类型
        kinds = "简易箱", "保温箱", "行李箱", "密封箱"
        colors = ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3']
        soldNums = [0.05, 0.45, 0.15, 0.35]
    
        plt.pie(soldNums,
                labels=kinds,
                autopct="%3.1f%%",
                startangle=60,
                colors=colors)
        plt.title("不同类型的箱子的销售数量占比")
        plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    img

    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=True, data=None)

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html?highlight=pie#matplotlib.pyplot.pie

    绘制饼图。

    制作数组 x 的饼图。 每个楔形的小数面积由x/sum(x)给出。 如果 sum(x) < 1,则 x 的值直接给出小数面积,数组不会被归一化。 生成的饼图将有一个大小为1 - sum(x)的空楔形。

    楔形按逆时针方向绘制,默认从 x 轴开始。

    参数:

    x1D array-like

    楔形大小。(给的是累加和等于1的list)

    explode: array-like, default: None

    如果不是 None,则为 len(x) 数组,它指定偏移每个楔形的半径分数。

    labels: list, default: None

    为每个楔形提供标签的字符串序列(元组和list都可以)

    colors: array-like, default: None

    饼图将循环使用的一系列颜色。 如果 None,将使用当前活动循环中的颜色(这个应该是有一套自己的默认颜色组合)。

    autopct: None or str or callable, default: None

    如果不是 None,是一个字符串或函数,用于用它们的数值标记楔形。 标签将放置在楔形内。 如果它是格式字符串,则标签将为 fmt % pct。 如果它是一个函数,它将被调用。

    autopct="%4.2f%%"
    
    • 1

    4表示显示数字的最大位数

    2表示小数点保留几位小数

    %表示百分比计算

    pctdistance: float, default: 0.6

    每个饼图的中心与 autopct 生成的文本的开头之间的比率。 如果 autopctNone,则忽略。

    shadow: bool, default: False

    在馅饼下面画一个阴影。

    normalize: bool, default: True

    True 时,总是通过标准化 x 来制作一个完整的饼图,以便 sum(x) == 1False 如果 sum(x) <= 1 则制作部分饼图,并为 sum( x) > 1

    labeldistance: float or None, default: 1.1

    绘制饼图标签的径向距离。 如果设置为 None,标签不会被绘制,但会存储在 legend() 中使用

    startangle: float, default: 0 degrees

    饼图起点从 x 轴逆时针旋转的角度。

    radius:float, default: 1

    饼的半径。

    counterclock: bool, default: True

    指定分数方向,顺时针或逆时针。

    wedgeprops: dict, default: None

    传递给制作馅饼的楔形对象的参数字典。 例如,您可以传入 wedgeprops = {'linewidth': 3} 来设置楔形边框线的宽度等于 3。有关更多详细信息,请查看楔形对象的文档/参数。 默认情况下 clip_on=False

    textprops: dict, default: None

    传递给文本对象的参数字典。

    center: (float, float), default: (0, 0)

    图表中心的坐标。

    frame: bool, default: False

    如果为真,则使用图表绘制轴框。

    rotatelabels: bool, default: False

    如果为真,则将每个标签旋转到相应切片的角度。

    data: indexable object, optional

    如果给定,以下参数也接受字符串 s,它被解释为 data[s](除非这引发异常):x, explode, labels, colors

    5. polar(绘制极线图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
    
        # 这个tuple类型
        barSlices = 12
        # 在0-2π均匀取12个值
        theta = np.linspace(0.0, 2*np.pi, barSlices, endpoint=False)
        # 生成 30*[0.1) 12个一维数组
        r = 30 * np.random.rand(barSlices)
        # chartreuse 是一种淡绿色
        plt.polar(theta, r, color="chartreuse", linewidth=2, marker='*', mfc="b", ms=10)
        plt.title("极线图")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    img

    matplotlib.pyplot.polar(*args, **kwargs)

    制作一个极坐标图。

    调用签名:

    polar(theta, r, **kwargs)
    
    • 1

    支持多个 thetar 参数,带有格式字符串,如 plot

    这个参数全部参考plot

    6. scatter(绘制气泡图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
    
        a = np.random.randn(100)
        b = np.random.randn(100)
        # RdYlBu属于中间渐变色
        plt.scatter(a, b, s=np.power(10*a+20*b, 2),
                    c=np.random.rand(100),
                    cmap=mpl.cm.RdYlBu,
                    marker="o")
    
        plt.title("气泡图")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    img

    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)

    具有不同标记大小和(或)颜色的 y 与 x 的散点图。

    参数:

    x, y: float or array-like, shape (n, )

    数据位置。

    s: float or array-like, shape (n, ), optional

    以点为单位的标记大小**2。 默认为 rcParams['lines.markersize'] ** 2

    c: array-like or list of colors or color, optional

    标记颜色。可能的值:

    • 使用 cmapnorm 将 n 个数字的标量或序列映射到颜色。(就是说在cmap的渐变色块选取颜色,可以是个随机数)
    • 一个二维数组,其中行是 RGB 或 RGBA。
    • 长度为 n 的颜色序列。
    • 单一颜色格式字符串。

    请注意,c 不应是单个数字 RGB 或 RGBA 序列,因为它与要进行颜色映射的值数组无法区分。如果要为所有点指定相同的 RGB 或 RGBA 值,请使用具有单行的二维数组。否则,在大小与 xy 匹配的情况下,值匹配将具有优先权。

    如果您希望为所有点指定单一颜色,请首选 color 关键字参数。

    默认为 None。在这种情况下,标记颜色由 colorfacecolorfacecolors 的值确定。如果未指定这些或 None,则标记颜色由当前的 Axes’ 的下一个颜色确定“形状和填充”颜色循环。这个循环默认为 rcParams["axes.prop_cycle"] (默认: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b'、'#e377c2'、'#7f7f7f'、'#bcbd22'、'#17becf']))。

    marker: MarkerStyle, default: rcParams["scatter.marker"] (default: ‘o’)

    标记样式。 marker 可以是类的实例,也可以是特定标记的文本简写。 有关标记样式的更多信息,请参阅 matplotlib.markers

    cmap: str or Colormap, default: rcParams["image.cmap"] (default: 'viridis')

    Colormap 实例或注册的颜色图名称。 cmap 仅在 c 是浮点数组时使用。

    normNormalize, default: None

    如果 c 是浮点数数组,norm 用于在 0 到 1 范围内缩放颜色数据 c,以便映射到颜色映射 cmap。 如果 None,使用默认的 colors.Normalize

    vmin, vmax: float, default: None

    vminvmax 与默认规范一起使用,以将颜色数组 c 映射到颜色图 cmap。 如果没有,则使用颜色数组的相应最小值和最大值。 在给出 norm 时使用 vmin/vmax 是错误的。

    alpha: float, default: None

    Alpha 混合值,介于 0(透明)和 1(不透明)之间。

    linewidths: float or array-like, default: rcParams["lines.linewidth"] (default: 1.5)

    标记边缘的线宽。 注意:默认的 edgecolors 是 ‘face’。 您可能也想更改此设置。

    edgecolors: {'face', 'none', *None*} or color or sequence of color, default: rcParams["scatter.edgecolors"] (default: ‘face’)

    标记的边缘颜色。 可能的值:

    • ‘face’:边缘颜色将始终与面颜色相同。
    • ‘none’:不绘制补丁边界。
    • 颜色或颜色序列。

    对于未填充的标记,edgecolors 将被忽略。 相反,颜色是像使用 ‘face’ 确定的,即来自 ccolorsfacecolors

    plotnonfinite: bool, default: False

    是否使用非有限 c 绘制点(即 inf-infnan)。 如果为“真”,则使用 bad 颜色图颜色绘制点(请参阅 [Colormap.set_bad](https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.Colormap.html#matplotlib.colors .Colormap.set_bad))。

    7. stem(绘制棉棒图)
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np
    
    
    def test():
        # 设置字体为黑体
        mpl.rcParams['font.family'] = 'SimHei'
        # 设置在中文字体是能够正常显示负号(“-”)
        mpl.rcParams['axes.unicode_minus'] = False
    
        x = np.linspace(0.5, 2*np.pi, 20)
        # randn函数返回一个或一组样本,具有标准正态分布。
        y = np.random.randn(20)
        plt.stem(x, y, linefmt="-.", markerfmt="o", basefmt="-")
        plt.title("棉棒图")
        plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    img

    matplotlib.pyplot.stem(*args, linefmt=None, markerfmt=None, basefmt=None, bottom=0, label=None, use_line_collection=True, orientation='vertical', data=None)

    https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.stem.html?highlight=stem#matplotlib.pyplot.stem

    创建一个棉棒图(茎图)。

    棉棒图在每个位置 locs 处从基线到 heads 绘制垂直于基线的线,并在此处放置一个标记。 对于垂直棉棒图(默认),locsx 位置,headsy 值。 对于水平茎图,locsy 位置,headsx 值。

  • 相关阅读:
    MySQL 8.0 OCP (1Z0-908) 考点精析-安装与配置考点1:设置系统变量
    MICROCHIP 24LC04BT-I/OT 电可擦除可编程只读存储器
    数据分析框架1.0 从黄金思维圈到万能三步走
    网页布局常用的8种布局方式
    AFNetworking网络请求详解
    Java中enum的使用
    04_RabbitMQ支持消息的模式
    TSC TTP244Pro 打码机出现的问题及解决方案
    ssm+java+vue面向企事业单位的项目申报小程序#毕业设计
    数据结构——排序【仅用于考试】
  • 原文地址:https://blog.csdn.net/myt2000/article/details/127668539