04. Matplolib库的使用

一、Matplotlib库简介

  Matplotlib 是一个用于制作出版级质量图表的桌面绘图包。该项目由 John Hunter 于 2002 年启动,其目的是为 Python 构建一个 MATLAB 式的绘图接口。随后,matplotlib 和 IPython 社区进行合作,对从 IPython 终端(包括现在的 Jupyter notebook)进行交互式绘图做了简化工作。matplotlib 支持各种操作系统上的多种 GUI 后端,而且还能将图片导出为各种常见的向量图和光栅图,包括 PDF、SVG、JPG、PNG、BMP、GIF 等。

  我们可以终端中使用 pip 安装 matplotlib 包。默认是从国外的主站上下载,因此,我们可能会遇到网络不好的情况导致下载失败。我们可以在 pip 指令后通过 -i 指定国内镜像源下载

pip install matplotlib  -i https://mirrors.aliyun.com/pypi/simple

  国内常用的 pip 下载源列表:

  Matplotlib的图像位于 Figure 对象中。你可以用 plt.figure()创建一张新图。在创建图标的时候,我们可以传入figsize=(width, height)参数,用于指定当图片保存到磁盘时,确保图片具有一定的大小和宽高比。创建完图标之后,我们可以调用show() 方法显示出来。

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, *, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
  • num:图形的 唯一标识符。如果是整数指的是图形的 “编号” 属性,字符串则指的是图形的标签。
  • figsize(width:float,height:float),默认值:rcParams["figure.figsize"](默认值:[6.4,4.8]),单位为英寸。
  • dpi:该图的 分辨率,浮点数,默认值:rcParams["figure.dpi] (默认值:100.0)。
  • facecolor背景颜色,默认值:`rcParams["figure.facecolor"](默认值:“白色”)。
  • edgecolor边框颜色,默认值:“白色”。
  • frameon:是否绘制图形框架。
  • FigureClass:是 Figure 类的子类。如果设置了相关参数,那么将会创建该子类的一个实例,而非普通的 “图” 对象。
  • clear:如果条件为真且该图形已经存在,那么就将其清除。
  • **kwargs:用于接收其它关键字参数。
import matplotlib.pyplot as plt

plt.figure()                                                                    # 创建图表
plt.show()                                                                      # 显示图表

  我们可以使用 title() 方法 添加图标的标题

matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, *, y=None, **kwargs)
  • label:标题所用文本。
  • fontdict:一个用于控制标题文本外观的字典。建议不要使用 fontdict。参数应以单独的关键字参数形式传递,或者使用字典解包的方式。
  • loc:标题的位置,可选值为:center, left, right, 默认值为 rcParams["axes.titlelocation"] (默认为 "center")。
  • pad:标题相对于坐标轴顶部的偏移量(单位:点)。默认值为 rcParams["axes.titlepad"](默认值:6.0)
  • y:标题的垂直轴位置(1.0 代表顶部)。如果设置为 “None”(默认值)且 rcParams["axes.titley"](默认值:None)也为 “None”,则 y 值将自动确定,以避免在坐标轴上添加装饰符。

  我们可以使用 legend() 方法 添加图例

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

  我们可以传入直接传入 一个字符串列表 充当图例的标签。然后通过 loc 关键字参数 设置图例的位置,它是一个字符串参数,可以取值如下:"best""upper left""upper center""upper right""lower left""lower center""lower right""center""right"

  我们可以通过 xlabel()ylabel() 方法 添加 X 轴和 Y 轴的标签

matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
matplotlib.pyplot.ylabel(ylabel, fontdict=None, labelpad=None, *, loc=None, **kwargs)
  • xlabelylabel:标签文本。
  • fontdict:一个用于控制标签文本外观的字典。
  • labelpad:与坐标轴边界框相关的点间距,包括刻度和刻度标签。若设置为 “None”,则保持之前的值不变。默认值:rcParams["axes.Labelpad"] (默认值:4.0)。
  • loc:标签位置。可选值如下:"bottom", "center", "top",默认值:rcParams["yaxis.labellocation"](默认值:"center")
  • **kwargs:文本属性决定了标签的外观。

  我们可以使用 xticks()yticks() 方法 设置坐标轴的刻度的标签

matplotlib.pyplot.xticks(ticks=None, labels=None, *, minor=False, **kwargs)
matplotlib.pyplot.yticks(ticks=None, labels=None, *, minor=False, **kwargs)
  • ticks:坐标轴刻度位置的列表。传递一个空列表将移除坐标轴上所有的刻度。
  • labels:要在给定的刻度位置处所贴的标签。只有在同时传递了 “ticks” 参数的情况下,才能传递此参数。
  • minor:如果为 False,则获取/设置主要刻度/标签;如果为 True,则获取/设置次要刻度/标签。
  • **kwargs:文本属性可用于控制标签的外观。常见的关键字参数如下:
    • rotation标签旋转角度
    • fontsize标签字体大小

  我们可以通过 xlim()ylim() 方法 设置 X 轴和 Y 轴的范围

matplotlib.pyplot.xlim(*args, **kwargs)
matplotlib.pyplot.ylim(*args, **kwargs)

  我们可以通过 leftright 关键字参数 指定 X 轴的范围,通过 topbottom 关键字参数 指定 Y 轴的范围

  我们可以通过 grid() 方法 设置网格线

matplotlib.pyplot.grid(visible=None, which='major', axis='both', **kwargs)
  • visible是否显示网格线。如果提供了任何关键字参数,则假定您希望显示网格,并且 “可见性” 将被设置为 True
  • which应用于主网格线还是次网格线。可选值如下:"major""minor""both"
  • axis应用于哪个轴。可选值如下:bothxy
  • **kwargs定义网格的线条属性,常见的关键字参数如下:
    • alpha网格线透明度
    • colorc网格线颜色
    • linestylels网格线样式
    • linewidthlw网格线宽度

  我们可以通过 text() 方法 在坐标轴上添加文件

matplotlib.pyplot.text(x, y, s, fontdict=None, **kwargs)
  • xy文本应放置的位置。默认情况下,该位置是以数据坐标系表示的。
  • s要添加的文本
  • fontdict文本样式字典。建议不要使用 fontdict。参数应以单独的关键字参数形式传递,或者使用字典解包的方式。

二、折线图

  我们可以使用 plot() 方法 绘制折线图

matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.family"] = "SimHei" 

month = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
sales = [100, 120, 80, 90, 110, 130, 100, 120, 80, 90, 110, 130]

plt.figure()                                                                    # 创建图表
plt.plot(month, sales)                                                          # 绘制折线图
plt.show()                                                                      # 显示图表

基础折线图

  在使用 plot() 方法绘制折线图时,可以传入 marker 关键字参数 指定标记点样式。常见的样式如下:

标记点样式

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

month = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
sales = [100, 120, 80, 90, 110, 130, 100, 120, 80, 90, 110, 130]

plt.figure()                                                                    # 创建图表
plt.plot(month, sales, marker="*")                                              # 绘制折线图,并指定标记点样式
plt.show()                                                                      # 显示图表

显示标记点的折线图

  我们还可以传入一个字符串用于指定样式。常见的样式如下:

线类型标记

颜色标记

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

month = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
sales = [100, 120, 80, 90, 110, 130, 100, 120, 80, 90, 110, 130]

plt.figure()                                                                    # 创建图表
plt.plot(month, sales, "d-.r")                                                  # 绘制折线图,并指定样式
plt.show()                                                                      # 显示图表

设置线条样式的折线图

  我们可以通过参数 ms 用于 指定义标记大小,参数 mfc 用于 指定标记内部的颜色,参数 mec 用于 指定标记边框颜色,参数 mew 用来 指定边框宽度

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

month = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
sales = [100, 120, 80, 90, 110, 130, 100, 120, 80, 90, 110, 130]

plt.figure()                                                                    # 创建图表
plt.plot(month, sales, marker="*", ms=20, mfc="r", mec="c", mew="2",lw=5)       # 绘制折线图
plt.show()                                                                      # 显示图表

自定义样式的折线图

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

month = ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"]
sales = [100, 120, 80, 90, 110, 130, 100, 120, 80, 90, 110, 130]

plt.figure()                                                                    # 创建图表

plt.plot(month, sales, 
         marker="o",                                                            # 设置折线图点的样式
         color="#66FFFF",                                                       # 折线图颜色
         linewidth=2,                                                           # 折线图线宽度
         linestyle="--"                                                         # 折线图线样式
    ) 

plt.title("销售趋势图", color="#99CCFF", fontsize=16)                           # 添加标题
plt.legend(["产品A"], loc="upper left")                                         # 添加图例
plt.xlabel("月份", color="#FF6666", fontsize=12)                                # 添加X轴标签
plt.ylabel("销售额(万元)", color="#FF6666", fontsize=12)                       # 添加Y轴标签
plt.xticks(rotation=15, fontsize=8)                                             # 设置X轴刻度标签的角度和字体大小
plt.yticks(fontsize=8)                                                          # 设置Y轴刻度标签的字体大小
plt.ylim(0, 150)                                                                # 设置Y轴的范围
plt.grid(True, alpha=0.3, color="#CCCCFF", linestyle="--")                      # 添加网格线并设置透明度、颜色和样式

# 设置数字标签
for x, y in zip(month, sales):
    plt.text(x, y + 1, str(y), ha='center', va='bottom', fontsize=20)

plt.show()                                                                      # 显示图表

折线图

三、柱状图

  我们可以使用 bar() 方法 绘制柱状图

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
  • x柱状图的 × 坐标。柱状图通常用于表示分类数据,即在柱体下方标注的字符串标签。您可以直接向 bar() 函数提供一个字符串列表。
  • height柱状图的高度。如果 bottom 有单位,那么 height 则应采用与 bottom 值不同的单位。
  • width条形的宽度。如果 × 具有单位,那么宽度应以围绕 × 值的差值单位来表示。
  • bottom柱体底部边界的 y 坐标。如果 bottom 具有单位,那么纵轴将会配备与这些单位相匹配的定位器和格式化器。
  • align:***条形与 × 坐标的对齐方式,可选值如下:
    • "center":将基线置于 × 坐标位置的中间。
    • "edge":使条形的左侧边缘与 × 坐标位置对齐。若要使右侧边框对齐,请传入负值宽度并设置 align="edge" 参数。
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

subjects = ["语文", "数学", "英语", "科学"]
scores = [93, 95, 90, 97]

plt.figure()                                                                    # 创建图表

# 绘制柱状图
plt.bar(subjects, scores, 
        color="#99CCFF",                                                        # 柱状图颜色
        width=0.6                                                               # 条形的宽度
    )

plt.title("成绩分布图", color="#99CCFF", fontsize=16)                           # 添加标题
plt.legend(["小樱"], loc="best")                                                # 添加图例
plt.xlabel("科目", color="#FF6666", fontsize=12)                                # 添加X轴标签
plt.ylabel("成绩", color="#FF6666", fontsize=12)                                # 添加Y轴标签
plt.xticks(rotation=15, fontsize=8)                                             # 设置X轴刻度标签的角度和字体大小
plt.yticks(fontsize=8)                                                          # 设置Y轴刻度标签的字体大小
plt.ylim(0, 100)                                                                # 设置Y轴的范围
plt.grid(axis="y", alpha=0.3, color="#CCCCFF", linestyle="--")                  # 添加网格线并设置透明度、颜色和样式

# 设置数字标签
for x, y in zip(subjects, scores):
    plt.text(x, y + 1, str(y), ha='center', va='bottom', fontsize=20)

plt.show()                                                                      # 显示图表

柱状图

四、条形图

  我们可以使用 barh() 方法 绘制条形图

matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', data=None, **kwargs)
  • y条形图的 y 坐标。条形图通常用于表示分类数据,即在柱体下方标注的字符串标签。您可以直接向 bar() 函数提供一个字符串列表。
  • width条形的宽度。如果 left 有单位,那么 height 则应采用与 left 值不同的单位。
  • height条形图的宽度。如果 y 具有单位,那么高度的单位则应与y值的差异单位相同。
  • left条形图左侧(或两侧)的 × 坐标。如果 left 具有单位,那么 × 轴将会配备与这些单位相匹配的定位器和格式化器。
  • align:***条形与 × 坐标的对齐方式,可选值如下:
    • "center":使条形图形在 y 位置居中。。
    • "edge":将条形图的底部边缘与 y 轴位置对齐。若要使顶部边缘的条形图对齐,请传入负值高度并设置 align="edge" 参数。
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

subjects = ["语文", "数学", "英语", "科学"]
scores = [93, 95, 90, 97]

plt.figure()                                                                    # 创建图表

plt.barh(subjects, scores, color="#99CCFF")                                     # 绘制条形图

plt.title("成绩分布图", color="#99CCFF", fontsize=16)                           # 添加标题
plt.legend(["小樱"], loc="best")                                                # 添加图例
plt.xlabel("成绩", color="#FF6666", fontsize=12)                                # 添加X轴标签
plt.ylabel("科目", color="#FF6666", fontsize=12)                                # 添加Y轴标签
plt.xticks(rotation=15, fontsize=8)                                             # 设置X轴刻度标签的角度和字体大小
plt.yticks(fontsize=8)                                                          # 设置Y轴刻度标签的字体大小
plt.xlim(0, 100)                                                                # 设置X轴的范围
plt.grid(axis="y", alpha=0.3, color="#CCCCFF", linestyle="--")                  # 添加网格线并设置透明度、颜色和样式

# 设置数字标签
for x, y in zip(scores, subjects):
    plt.text(x + 1, y, str(x), ha='center', va='bottom', fontsize=20)

plt.show()                                                                      # 显示图表

条形图

五、饼图

  我们可以使用 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=True, hatch=None, data=None)
  • x浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。
  • explode:数组,表示 各个扇形之间的间隔,默认值为 0。
  • labels:一系列字符串,用于为 每个扇形部分标注标签
  • colors单个颜色或颜色列表。饼图将依次循环显示的一系列颜色。若设置为 “无”,则将使用当前活动循环中的颜色
    线填充。
  • autopct:如果不为 None,则 autopct 是一个字符串或函数,用于在圆弧上标注其数值。标注内容会置于圆弧内部。如果 autopct 是一个格式字符串,那么标注内容将为 fmt % pct。如果 autopct 是一个函数,则会调用该函数。
  • pctdistanceautopct 生成的文本在半径方向上的相对绘制距离。若要将文本绘制在饼图外部,请将 pctdistance 设置为大于 1 的值。如果 autopct 为 None,则此参数将被忽略。
  • shadow是否绘制阴影。如果为布尔值,则表示是否在饼图下方绘制阴影。如果为字典,则根据字典中的属性绘制一个阴影效果。
  • labeldistance标签绘制时沿半径方向的相对距离。若要将标签绘制在饼图内部,请将 labeldistance 设置为小于 1 的值。若将其设置为 None,则不会绘制标签,但仍会将其存储以便在图例中使用。
  • startangle:表示 饼图起始部分相对于 × 轴逆时针旋转的角度
  • radius饼图的半径
  • counterclock:布尔值,用于指定 是否逆时针绘制扇形,默认为 True,即逆时针绘制,False 为顺时针。
  • wedgeprops:字典类型,默认值 None。用于 指定扇形的属性,比如边框线颜色、边框线宽度等。
  • textprops:字典类型,用于 指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。
  • center图表中心的坐标,默认值:(0, 0)。
  • frame:布尔类型,用于指定 是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。
  • rotatelabels:布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • normalize:当为真时,始终通过对 x 进行标准化处理(使 x 的总和等于 1)来生成完整的饼图。当为假时,如果 × 的总和小于或等于 1,则生成部分饼图;若 × 的总和大于1,则会引发 ValueError 异常。
  • data:用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。

  pie() 函数还可以返回三个参数:

  • wedges:一个包含扇形对象的列表。
  • texts:一个包含文本标签对象的列表。
  • autotexts:一个包含自动生成的文本标签对象的列表。
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

things = ["学习", "娱乐", "运动", "睡觉", "其它"]
times = [6, 4, 1, 8, 5]
colors = ["#FFCC99", "#FF9999", "#FFCC00", "#99CCFF", "#CC99FF"]
explode = [0.1, 0, 0, 0, 0]                                                     # 添加偏移量

plt.figure()                                                                    # 创建图表

# 绘制柱状图
plt.pie(times, labels=things, 
        autopct="%.1f%%",                                                       # 添加百分比
        startangle=90,                                                          # 设置起始角度
        colors=colors,                                                          # 设置每个扇形的颜色
        explode=explode,                                                        # 设置各个扇形之间的间隔
        shadow=True                                                             # 添加阴影
    )

plt.title("一天的时间分布", color="#99CCFF", fontsize=16)                       # 添加标题

plt.show()                                                                      # 显示图表

饼图

  如果我们要绘制 环状图,可以传入wddgeprops 关键字参数来绘制。

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.sans-serif"] = "SimHei"

things = ["学习", "娱乐", "运动", "睡觉", "其它"]
times = [6, 4, 1, 8, 5]
colors = ["#FFCC99", "#FF9999", "#FFCC00", "#99CCFF", "#CC99FF"]
explode = [0.1, 0, 0, 0, 0]                                                     # 添加偏移量

plt.figure()                                                                    # 创建图表

# 绘制环状图
plt.pie(times, labels=things, 
        autopct="%.1f%%",                                                       # 添加百分比
        startangle=90,                                                          # 设置起始角度
        colors=colors,                                                          # 设置每个扇形的颜色
        explode=explode,                                                        # 设置各个扇形之间的间隔
        shadow=True,                                                            # 添加阴影
        wedgeprops={"width": 0.6},                                              # 指定扇形的属性,这里设置扇形的宽度
        pctdistance=0.6,                                                        # 生成的文本在半径方向上的相对绘制距离
    ) 

plt.title("一天的时间分布", color="#99CCFF", fontsize=16)                       # 添加标题
plt.text(0, 0, "总计:100%", ha="center", va="bottom", fontsize=10)

plt.show()                                                                      # 显示图表

环状图

六、散点图

  我们可以使用 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, colorizer=None, plotnonfinite=False, data=None, **kwargs)
  • xy :长度相同的数组,也就是我们即将绘制散点图的 数据点,输入数据。
  • s点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
  • c点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。
  • marker点的样式,默认小圆圈 'o'。
  • cmap :Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
  • norm :Normalize,默认 None,数据亮度 在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
  • vminvmax亮度设置,在 norm 参数存在时会忽略。
  • alpha透明度设置,0 ~ 1 之间,默认 None,即不透明。
  • linewidths标记点的长度
  • edgecolors颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。
  • plotnonfinite:布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
  • **kwargs:其它关键字参数。
import random
from turtle import color
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.family"] = "SimHei" 

x = []
y = []

for i in range(100):
    num1 = random.uniform(0, 10)
    x.append(num1)
    num2 = 2 * num1 + random.gauss(0, 2)
    y.append(num2)

plt.figure()                                                                    # 创建图表

# 绘制散点图
plt.scatter(x, y,
            s=20,                                                               # 点大小
            color="#0088FF",                                                    # 点颜色
            alpha=0.5                                                           # 透明度
    )

plt.title("X变量与Y变量的关系", color="#0088FF", fontsize=20)                   # 图表标题
plt.legend(["数据"], loc="upper left")                                            # 图例
plt.xlabel("X变量", color="#0088FF", fontsize=15)                               # X轴标签
plt.ylabel("Y变量", color="#0088FF", fontsize=15)                               # Y轴标签
plt.xticks(rotation=15, fontsize=8)                                             # 设置X轴刻度标签的角度和字体大小
plt.yticks(fontsize=8)                                                          # 设置Y轴刻度标签的字体大小
plt.ylim(0, 30)                                                                # 设置Y轴的范围
plt.grid(True, alpha=0.3, color="#CCCCFF", linestyle="--")                      # 添加网格线并设置透明度、颜色和样式
plt.show()                                                                      # 显示图表

散点图

七、箱线图

箱线图示例

matplotlib.pyplot.boxplot(x, *, notch=None, sym=None, vert=None, orientation='vertical', whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, tick_labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None, manage_ticks=True, autorange=False, zorder=None, capwidths=None, label=None, data=None)
  • x:指定要绘制箱线图的数据。
  • notch:是否是凹口的形式展现箱线图,默认非凹口。
  • sym:指定异常点的形状,默认为 + 号显示。
  • vert:是否需要将箱线图垂直摆放,默认垂直摆放。
  • orientation:方向,如果值为 "horizontal",则则将箱形图横向绘制。如果值为 vertical,则箱形图纵向绘制。
  • whis:指定上下须与上下四分位的距离,默认为 1.5 倍的四分位差。
  • positions:指定箱线图的位置,默认为 [0,1,2…]。
  • widths:指定箱线图的宽度,默认为 0.5。
  • patch_artist:是否填充箱体的颜色。
  • bootstrap:指定是否为带缺口的箱形图的中位数计算置信区间时采用自助法。
  • usermedians:用户均值。
  • conf_intervals:置信区间。
  • meanline:是否用线的形式表示均值,默认用点来表示。
  • showmeans:是否显示均值,默认不显示。
  • showcaps:是否显示箱线图顶端和末端的两条线,默认显示。
  • showbox:是否显示箱线图的箱体,默认显示。
  • showfliers:是否显示异常值,默认显示。
  • boxprops:设置箱体的属性,如边框色,填充色等。
  • tick_labels:为箱线图添加标签,类似于图例的作用。已过时,请用 labels 代替。
  • filerprops:设置异常值的属性,如异常点的形状、大小、填充色等。
  • medianprops:设置中位数的属性,如线的类型、粗细等。
  • meanprops:设置均值的属性,如点的大小、颜色等。
  • capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等。
  • whiskerprops:设置须的属性,如颜色、粗细、线的类型等。
  • manage_ticks:如果为真,则会调整刻度位置和标签,使其与箱形图的位置相匹配。
  • autorange:当 True 且数据的分布情况使得第 25 百分位数和第 75 百分位数相等时,将其设置为 (0, 100),这样指针的末端就会位于数据的最小值和最大值处。
  • zorder:箱形图的排列顺序。
  • capwidths:帽宽。
  • label:为箱线图添加标签,类似于图例的作用。
import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.family"] = "SimHei" 

data = {
    "语文": [82, 85, 88, 82, 90, 76, 84, 83, 95, 80],
    "数学": [75, 80, 79, 93, 65, 88, 56, 94, 97, 33],
    "英语": [89, 93, 54, 70, 97, 68, 88, 96, 82, 15],
}

plt.figure()                                                                    # 创建图表

# 绘制散点图
plt.boxplot(data.values(), tick_labels=data.keys())

plt.title("各科成绩分布(箱线图)", color="#0088FF", fontsize=20)                 # 图表标题
plt.xlabel("学科", color="#0088FF", fontsize=15)                                # X轴标签
plt.ylabel("分数", color="#0088FF", fontsize=15)                                # Y轴标签
plt.xticks(rotation=15, fontsize=8)                                             # 设置X轴刻度标签的角度和字体大小
plt.yticks(fontsize=8)                                                          # 设置Y轴刻度标签的字体大小
plt.ylim(0, 100)                                                                # 设置Y轴的范围
plt.grid(True, alpha=0.3, color="#CCCCFF", linestyle="--")                      # 添加网格线并设置透明度、颜色和样式
plt.show()                                                                      # 显示图表

箱线图

八、绘制多个图表

  我们可以使用 subplot(row, column, index) 方法创建子图。

import matplotlib.pyplot as plt

from matplotlib import rcParams

# 设置使用的字体,matplotlib默认字体对中文的支持不够好
rcParams["font.family"] = "SimHei" 

month = ["1", "2", "3", "4"]
sales = [100, 120, 80, 90]

f1 = plt.subplot(2, 2, 1)                                                       # 创建子图表
f1.plot(month, sales)                                                           # 绘制折线图

# 对于行和列都是一位数以内的,可以缩写
f2 = plt.subplot(222)                                                           # 创建子图表
f2.bar(month, sales)                                                            # 绘制柱状图

f3 = plt.subplot(2, 2, 3)                                                       # 创建子图表
f3.scatter(month, sales)                                                        # 绘制散点图

f4 = plt.subplot(224)                                                           # 创建子图表
f4.barh(month, sales)                                                           # 绘制条形图

plt.show()                                                                      # 显示图表

绘制多个图表

九、组合图

posted @ 2025-11-16 22:11  星光映梦  阅读(17)  评论(0)    收藏  举报