数据分析(一)

数据分析

一.Matplotlib

在这里插入图片描述

1.Matplotlib介绍

名词解释:
mat - matrix 矩阵
plot - 画图
lib - library 库

matplotlib-----------------主要用于画二维图表的python工具库

Matplotlib 是一个用于创建数据可视化和图表的 Python 库.它是一个非常强大且广泛使用的工具,用于在科学、工程、数据分析和机器学习等领域中可视化数据。Matplotlib 提供了丰富的绘图功能,允许用户创建各种类型的图表,包括线图、散点图、柱状图、饼图、热力图等等

补充:
Matplotlib 是专门用于开发 2D 图表(包括 3D 图表)的 python 库

大多数 Matplotlib 实用程序都位于pyplot子模块下,并且通常在别名下导入pltimport matplotlib.pyplot as plt

对应的 JS 库有 D3 echarts

官网:Matplotlib

2.Matplotlib的三层结构

在这里插入图片描述

  • 容器层

    1. 画板层 Canvas

      Canvas是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布(Figure)的工具。

    2. 画布层 Figure

      plt.figure,在绘图的过程中充当画布的角色

    3. 绘图区/坐标系axes

      • 一个绘图区由横纵坐标构成,所以也叫坐标系.
      • 默认会创建一个绘图区.可以显示调用plt.subplots创建多个绘图区(子图),一个画布可以有多个绘图层
  • 图像层

    图像层指在Axes(绘图区)内通过plot(折线图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图)等函数根据数据绘制出的图像

  • 辅助显示层

    辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。
    该层的设置可使图像显示更加直观更加容易被用户理解,但又不会对图像产生实质的影响。

总结

Canvas(画板)位于最底层,用户一般接触不到
Figure(画布)建立在Canvas之上
Axes(绘图区)建立在Figure之上
坐标轴(axis)、图例(legend)等辅助显示层以及图像层都是建立在Axes之上

3.Matplotlib绘图基础

3.1绘图示例

示例

import matplotlib.pyplot as plt

# 1.准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 2.创建一个新的图布              ----------------------------------------------------------------容器层
plt.figure()

# 绘制折线图                   ----------------------------------------------------------------图像层      
plt.plot(x, y, marker='o', linestyle='-', color='b', label='折线图')

# 3.添加标题和标签                  ----------------------------------------------------------------辅助显示层
plt.title('标准折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 添加网格线                     ----------------------------------------------------------------辅助显示层
plt.grid(True)

# 添加图例                       ----------------------------------------------------------------辅助显示层
plt.legend()

# 4.显示图表
plt.show()

效果
在这里插入图片描述

3.2绘图流程

在这里插入图片描述

  • 第一部分:通常是用于创建画布,以及设计好是否需要创建子图;
  • 第二部分:针对每个子图,或者当前画布图像涉及画布内容(第二部分内容决定了你图像的美观程度);
  • 第三部分:就是关于图像的保存以及图像的显示, 一般保存在前然后才进行显示;

核心步骤基本就三大步:

  1. 创建画布与子图
  2. **定义坐标轴 **(杂七杂八的设置项)
  3. 保存或生成生成图片
3.3图形参数解析

在这里插入图片描述

一个标准的Matplotlib图表通常由以下几个组成元素构成:

  • 容器层

    1. 图形(Figure):图形(画布)是整个图表的最外层容器,可以包含一个或多个坐标图形(axes)。你可以使用plt.figure()函数创建新的图形。
    2. 坐标图形 (Axes):坐标图形是图表中的一个小区域,用于绘制数据。通常一个图形中包含一个或多个坐标图形,你可以使用plt.subplot()plt.subplots()来创建它们。
  • 图像层

    Axes(绘图区)内通过plot(折线图)、scatter(散点图)、bar(柱状图)、histogram(直方图)、pie(饼图)等函数根据数据绘制出的图像

    **坐标轴 **:每个子图都包含坐标轴,坐标轴用于表示数据的范围和刻度。你可以在坐标轴上绘制数据点、线条、文本等。Matplotlib提供了ax.plot()ax.scatter()等函数来在坐标轴上绘制图形。

  • 辅助显示层

    1. 图例 (Legend):图例用于解释图表中不同数据系列的含义。你可以使用ax.legend()来创建图例,通常在坐标图形中设置。
    2. 主要刻度 (Major Tick):主要刻度是坐标轴上的大刻度,用于表示主要的数据点位置。你可以使用ax.set_xticks()ax.set_yticks()来自定义主要刻度。
    3. 次要刻度 (Minor Tick):次要刻度是坐标轴上的小刻度,通常位于主要刻度之间,用于更精细地标记坐标轴。你可以使用ax.minorticks_on()启用次要刻度。
    4. 主要刻度标签 (Major Tick Label):主要刻度标签是与主要刻度关联的数值标签。Matplotlib通常会自动生成它们,但你可以使用ax.set_xticklabels()ax.set_yticklabels()来自定义主要刻度标签。
    5. 次要刻度标签 (Minor Tick Label):次要刻度标签是与次要刻度关联的数值标签。你可以使用ax.set_xticklabels()ax.set_yticklabels()来自定义次要刻度标签。
    6. Y轴名称 (Y Axis Label):Y轴名称用于描述Y轴所代表的数据。你可以使用ax.set_ylabel()来设置Y轴名称。
    7. X轴名称 (X Axis Label):X轴名称用于描述X轴所代表的数据。你可以使用ax.set_xlabel()来设置X轴名称。
    8. 标题 (Title):标题是图表的名称,通常位于图表的顶部。你可以使用ax.set_title()来设置子图的标题,或者使用plt.title()设置整个图表的标题。
    9. 数据标记 (Markers):数据标记是用于标识散点图中的数据点的符号或标记。你可以在绘制散点图时使用marker参数来指定数据标记的类型。
    10. 网格线 (Grid):网格线是绘制在坐标图形上的水平和垂直线,用于帮助读者对数据的位置有更清晰的认识。你可以使用ax.grid()来添加或删除网格线。
    11. 背景 (Background):图表的背景可以是白色、灰色或其他颜色,也可以是带有网格线的背景。你可以使用ax.set_facecolor()来更改坐标轴的背景颜色。
    12. 注释 (Annotations):注释是在图表上添加文本或箭头以解释数据点或图形的附加信息。你可以使用ax.annotate()来添加注释。
    13. 颜色、线型和标记 (Colors, Line Styles, and Markers):你可以使用不同的颜色、线型和标记来自定义绘制的线条或数据点的外观。这些属性可以通过相应的参数来设置,如colorlinestylemarker

这些是Matplotlib图表的主要组成元素,你可以根据需要定制和控制每个元素的外观和行为,以创建符合你需求的数据可视化图表。

3.4绘图线

在Matplotlib中,你可以通过不同的参数来自定义绘图线的类型(线型)、颜色和大小。这些参数通常是在绘制图形时的函数中指定的

a.线的类型

线的类型可以使用 linestyle 参数来定义,简写为 ls

类型简写说明
‘solid’ (默认)‘-’实线
‘dotted’‘:’点虚线
‘dashed’‘–’破折线
‘dashdot’‘-.’点划线
‘None’‘’ 或 ’ ’不画线

b.颜色(Color)

线的颜色可以使用 color 参数来定义,在Matplotlib中使用颜色字符串,颜色名称,RGB元组来指定线的颜色

颜色字符串颜色描述
'b'蓝色
'g'绿色
'r'红色
'c'青色
'm'品红
'y'黄色
'k'黑色
颜色名称颜色描述
'blue'蓝色
'green'绿色
'red'红色
'cyan'青色
'magenta'品红
'yellow'黄色
'black'黑色
RGB元组颜色描述
(0.2, 0.4, 0.6)自定义颜色
(1, 0.5, 0.2)自定义颜色
(0.8, 0.2, 0.3)自定义颜色

c.线的大小

线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:12.05.67 等。

示例

import matplotlib.pyplot as plt

# 创建数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制不同线型、颜色和大小的线
plt.plot(x, y, linestyle='--', color='red', linewidth=2, label='Line 1')
plt.plot(x, [i**2 for i in y], linestyle=':', color='blue', lw=1.5, label='Line 2')
plt.plot(x, [i**1.5 for i in y], linestyle='-.', color='green', lw=3, label='Line 3')

# 添加图例
plt.legend()

# 显示图形
plt.show()

效果图

在这里插入图片描述

3.5绘图标记

图过程如果我们想要给坐标自定义一些不一样的标记,就可以使用 plot() 方法(or其他方法)的 marker 参数来定义

marker 可以定义的符号如下:

标记符号描述
“.”m00
“,”m01像素点
“o”m02实心圆
“v”m03下三角
“^”m04上三角
“<”m05左三角
“>”m06右三角
“1”m07下三叉
“2”m08上三叉
“3”m09左三叉
“4”m10右三叉
“8”m11八角形
“s”m12正方形
“p”m13五边形
“P”m23加号(填充)
“*”m14星号
“h”m15六边形 1
“H”m16六边形 2
“+”m17加号
“x”m18乘号 x
“X”m24乘号 x (填充)
“D”m19菱形
“d”m20瘦菱形
“|”m21竖线
“_”m22横线
0 (TICKLEFT)m25左横线
1 (TICKRIGHT)m26右横线
2 (TICKUP)m27上竖线
3 (TICKDOWN)m28下竖线
4 (CARETLEFT)m29左箭头
5 (CARETRIGHT)m30右箭头
6 (CARETUP)m31上箭头
7 (CARETDOWN)m32下箭头
8 (CARETLEFTBASE)m33左箭头 (中间点为基准)
9 (CARETRIGHTBASE)m34右箭头 (中间点为基准)
10 (CARETUPBASE)m35上箭头 (中间点为基准)
11 (CARETDOWNBASE)m36下箭头 (中间点为基准)
“None”, " " or “”没有任何标记
f f fm37渲染指定的字符。例如 “ f f f” 以字母 f 为标记。

示例

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 5, 7, 2, 8]

# 绘制散点图,使用不同的标记
plt.scatter(x, y, marker='o', label='Circle')
plt.scatter(x, [i+1 for i in y], marker='s', label='Square')
plt.scatter(x, [i-1 for i in y], marker='^', label='Triangle')
plt.scatter(x, [i+2 for i in y], marker='*', label='Star')

# 添加图例
plt.legend()

# 显示图形
plt.show()

效果图

在这里插入图片描述

4.函数解析

常用函数(简化版)

函数核心参数说明功能
figure(figsize, dpi)figsize(图表尺寸), dpi(分辨率)设置图表的大小与分辨率。
title(v, fontdict)v(图名), fontdict(文本格式,包括字体大小、类型)设置图表标题。
xlabel(xlabel)xlabel(X轴名)设置X轴的标题。
ylabel(ylabel)ylabel(Y轴名)设置Y轴的标题。
axis(xmin, xmax, ymin, ymax)xmin, xmax, ymin, ymax(设置X轴和Y轴的范围)设置X轴和Y轴的范围。
xticks(ticks, labels, fontdict)ticks(刻度数值), labels(刻度名称), fontdict(字体格式)设置X轴刻度位置、标签和字体格式。
yticks(ticks, labels, fontdict)ticks(刻度数值), labels(刻度名称), fontdict(字体格式)设置Y轴刻度位置、标签和字体格式。
grid(b, which, axis, color, linestyle, linewidth, alpha)b(有无网格线), which(主/次网格线), axis(X轴和Y轴网格线), color(颜色), linestyle(线型), linewidth(线宽), alpha(透明度)设置网格线的属性,包括显示与否、类型、颜色、线型等。
4.1容器层
4.1.1画布层

**plt.figure() **

figure()函数用于创建一个新的图形,您可以通过参数调整图形的尺寸、分辨率、背景颜色等属性。可以使用它来创建单独的图形,或者在多个图形之间切换。如果不指定参数,将使用默认值。

1.函数签名

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, clear=False, **kwargs)

2.常用参数解析

  • num (int or str, 可选): 图形的标识号,可以是整数或字符串。如果未指定,将自动生成一个唯一的标识号。
  • figsize (tuple, 可选): 图形的尺寸,以英寸为单位,通常以一个包含两个浮点数的元组表示 (width, height)。默认为 None,表示使用默认尺寸。
  • dpi (int, 可选): 图形的分辨率(每英寸像素数)。默认为 None,表示使用默认分辨率。
  • facecolor (color, 可选): 图形的背景颜色。可以是颜色名称字符串或RGBA元组。默认为白色。
  • edgecolor (color, 可选): 图形的边框颜色。可以是颜色名称字符串或RGBA元组。默认为白色。
  • frameon (bool, 可选): 控制图形是否有边框。如果设置为 False,图形将没有边框。默认为 True
  • clear (bool, 可选): 如果为 True,则在创建新图形之前清除当前图形。默认为 False
  • **kwargs: 其他关键字参数,通常用于传递给具体图形的构造函数。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个新的图形,默认尺寸和分辨率
plt.figure()

# 创建一个新的图形,指定尺寸和分辨率
plt.figure(figsize=(6, 4), dpi=100)

# 创建一个带有背景颜色的图形
plt.figure(facecolor='lightgray')

# 创建一个没有边框的图形
plt.figure(frameon=False)

# 清除当前图形并创建一个新的图形
plt.figure(clear=True)

# 使用标识号创建一个特定的图形
plt.figure(num=1)

# 使用kwargs传递额外参数
plt.figure(figsize=(8, 6), dpi=150, facecolor='lightblue')
4.2绘图区

1. plt.subplot()

subplot()函数用于创建一个多子图布局,并选择当前子图以进行绘图。通过指定行数(nrows)、列数(ncols)和子图索引(index),可以将图形分割为不同的子图。在每个子图中,您可以绘制不同的图形或数据,并对每个子图进行单独的操作。最后,使用plt.show()显示整个图形。

1.函数签名

matplotlib.pyplot.subplot(nrows, ncols, index, **kwargs)

2.常用参数解析

  • nrows (int): 子图的行数。
  • ncols (int): 子图的列数。
  • index (int): 当前子图的索引,从左上角开始,从左到右、从上到下递增,从1开始计数。
  • **kwargs: 其他关键字参数,通常用于传递给子图的构造函数。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个2x2的子图布局,选择第一个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 2, 1, 3])
plt.title('Subplot 1')

# 选择第二个子图
plt.subplot(2, 2, 2)
plt.plot([1, 2, 3, 4], [4, 3, 2, 1])
plt.title('Subplot 2')

# 选择第三个子图
plt.subplot(2, 2, 3)
plt.plot([1, 2, 3, 4], [2, 3, 2, 4])
plt.title('Subplot 3')

# 选择第四个子图
plt.subplot(2, 2, 4)
plt.plot([1, 2, 3, 4], [3, 1, 3, 2])
plt.title('Subplot 4')

# 调整子图布局之间的间距
plt.tight_layout()

# 显示整个图形
plt.show()

效果图
在这里插入图片描述

2. plt.subplots()

subplots()函数用于创建一个多子图布局,并返回包含子图对象的数组。通过指定行数(nrows)和列数(ncols),您可以创建多个子图,并通过sharexsharey参数来控制是否共享X轴和Y轴刻度。您可以在每个子图中绘制不同的图形或数据,并对每个子图进行单独的操作。最后,使用plt.show()显示整个图形。

1.函数签名

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

2.常用参数解析

  • nrows (int, 可选): 子图的行数,默认为1。
  • ncols (int, 可选): 子图的列数,默认为1。
  • sharex (bool or {‘none’, ‘all’, ‘row’, ‘col’}, 可选): 控制是否共享X轴刻度。
  • sharey (bool or {‘none’, ‘all’, ‘row’, ‘col’}, 可选): 控制是否共享Y轴刻度。
  • squeeze (bool, 可选): 控制是否对子图数组进行挤压以删除空维度。
  • subplot_kw (dict, 可选): 传递给add_subplot()方法的关键字参数。
  • gridspec_kw (dict, 可选): 传递给GridSpec构造函数的关键字参数。
  • **fig_kw: 传递给figure()函数的关键字参数。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个2x2的子图布局,共享X轴和Y轴
fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)

# 在每个子图中绘制数据
axs[0, 0].plot([1, 2, 3, 4], [1, 2, 1, 3])
axs[0, 0].set_title('Subplot 1')

axs[0, 1].plot([1, 2, 3, 4], [4, 3, 2, 1])
axs[0, 1].set_title('Subplot 2')

axs[1, 0].plot([1, 2, 3, 4], [2, 3, 2, 4])
axs[1, 0].set_title('Subplot 3')

axs[1, 1].plot([1, 2, 3, 4], [3, 1, 3, 2])
axs[1, 1].set_title('Subplot 4')

# 设置整个图形的标题
fig.suptitle('Four Subplots Sharing Axes')

# 调整子图布局之间的间距
plt.tight_layout()

# 显示整个图形
plt.show()

效果图

在这里插入图片描述

注意

  • 在matplotlib 中,有两种画图方式
  1. plt.xxx 系列:
    • 这是Matplotlib中的快速绘图方式,适合初学者或需要快速创建简单图形的场景。它提供了许多方便的函数,如plt.plot()plt.scatter()等,使得绘图变得容易上手。
    • 对于简单的图形,这种方式足够了,但当需要更高级的图形自定义和精细调整时,可能就显得不够灵活。
  2. fig, ax = plt.subplots() 方式:
    • 这是更加灵活和控制细节的方式。你可以明确地创建画布(figure)和子图(axes),然后对每个子图进行单独操作。
    • 这种方式让你更容易理解Matplotlib的底层结构,允许你对图形的各个部分进行更细致的控制,包括坐标轴、图例、标题等。
  • figure 指的是画布 v
  • axes 这个画布中的一个对象,可以是一个子图
  • **axis **axes 这个对象中的坐标轴
4.2图像层

1. plot()

plot()方法用于绘制曲线图,可以用不同的参数和关键字参数来控制曲线的样式、颜色、标记、线型等。您可以绘制单条曲线或多条曲线,也可以使用DataFrame作为数据源。此外,可以通过设置scalexscaley来控制X轴和Y轴的缩放。通常,还可以使用legend()来添加图例,以便标识不同曲线的含义。这个方法是Matplotlib中用于绘制曲线图的核心函数之一。

1.函数签名

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

2.常用参数解析

  • *args: 用于传递数据的位置参数。可以是以下几种形式之一:
    • 单个数组或序列,表示Y轴数据,X轴数据默认为该序列的索引。
    • 两个数组或序列,分别表示X轴和Y轴的数据。
    • 多组X轴和Y轴数据,用于绘制多条曲线。
  • scalex (bool, 可选): 控制X轴数据是否进行缩放,默认为 True,表示进行缩放。
  • scaley (bool, 可选): 控制Y轴数据是否进行缩放,默认为 True,表示进行缩放。
  • data (DataFrame, 可选): 用于传递数据的DataFrame,如果指定了DataFrame,则可以使用DataFrame中的列名作为数据源。
  • **kwargs: 其他关键字参数,用于控制曲线的样式、颜色、标记、线型、线宽等,以及图例、标签等属性。

3.用法示例

import matplotlib.pyplot as plt

# 示例1: 绘制单条曲线
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8)

# 示例2: 绘制多条曲线
x = [1, 2, 3, 4]
y1 = [1, 2, 1, 3]
y2 = [3, 2, 4, 1]
plt.plot(x, y1, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8)
plt.plot(x, y2, label='Line 2', color='green', linestyle='--', marker='s', markersize=8)

# 示例3: 使用DataFrame作为数据源
import pandas as pd
data = pd.DataFrame({'X': x, 'Y': y})
plt.plot('X', 'Y', data=data, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8)

# 示例4: 隐藏X轴和Y轴的缩放
plt.plot(x, y, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8, scalex=False, scaley=False)

# 示例5: 添加图例
plt.plot(x, y1, label='Line 1', color='blue', linestyle='-', marker='o', markersize=8)
plt.plot(x, y2, label='Line 2', color='green', linestyle='--', marker='s', markersize=8)
plt.legend(loc='upper right')

# 显示图表
plt.show()

效果图

在这里插入图片描述

2. scateer()

scatter()方法用于绘制散点图,它可以根据数据点的位置、大小、颜色、标记样式等属性来表示数据分布。您可以通过传递不同的参数来自定义数据点的外观,例如大小、颜色、透明度等。通常,散点图用于显示两个数值变量之间的关系,或者用于显示多维数据的分布情况。这个方法是Matplotlib中用于绘制散点图的重要函数。

1.函数签名

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)

2.常用参数解析

  • x (array-like): X轴的数据点的位置。
  • y (array-like): Y轴的数据点的位置。
  • s (float or array-like, 可选): 数据点的大小。可以是一个标量,表示所有点的相同大小,或者是一个与x和y具有相同长度的数组,用于指定每个点的大小。
  • c (color, sequence, or sequence of color, 可选): 数据点的颜色。可以是一个颜色名称、一个颜色序列,或一个与x和y具有相同长度的数组,用于指定每个点的颜色。
  • marker (str, 可选): 数据点的标记样式,例如圆圈、正方形、星号等。
  • cmap (Colormap, 可选): 用于映射颜色的颜色映射对象。通常与c参数一起使用,用于根据数值数据生成颜色。
  • norm (Normalize, 可选): 用于归一化颜色映射的归一化对象。
  • vmin, vmax (float, 可选): 用于设置颜色映射的数据值范围,用于归一化颜色映射。
  • alpha (float, 可选): 数据点的透明度,取值范围为0(完全透明)到1(不透明)。
  • linewidths (float, 可选): 数据点的边框线宽度。
  • edgecolors (color or sequence of color, 可选): 数据点的边框颜色。
  • **kwargs: 其他关键字参数,用于控制数据点的属性,例如标签、颜色映射、图例等。

3.用法示例

import matplotlib.pyplot as plt

# 示例1: 绘制散点图,指定数据点大小和颜色
x = [1, 2, 3, 4, 5]
y = [2, 3, 1, 4, 2]
plt.scatter(x, y, s=100, c='red', marker='o', label='Data Points')

# 示例2: 使用数组指定数据点的大小和颜色
sizes = [20, 40, 60, 80, 100]
colors = ['red', 'green', 'blue', 'orange', 'purple']
plt.scatter(x, y, s=sizes, c=colors, marker='s', label='Data Points')

# 示例3: 使用颜色映射绘制数据点
import numpy as np
size = np.random.randint(10, 100, size=50)
temperature = np.random.rand(50)
plt.scatter(x, y, s=size, c=temperature, cmap='coolwarm', edgecolors='black')
plt.colorbar(label='Temperature')

# 示例4: 自定义其他属性
plt.scatter(x, y, s=80, c='blue', marker='^', alpha=0.7, linewidths=2, edgecolors='black', label='Data Points')

# 添加图例
plt.legend()

# 显示图表
plt.show()

效果图

在这里插入图片描述

3. bar()

bar()方法用于绘制条形图,通常用于显示不同类别或数据点的数值大小。您可以通过传递不同的参数来自定义条形图的外观,包括颜色、宽度、对齐方式等。条形图常用于比较不同类别的数据,并可以堆叠多个数据系列以显示总和。这个方法是Matplotlib中用于绘制条形图的核心函数之一。

1.函数签名

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

2.常用参数解析

  • x (array-like): 条形图的X轴位置,通常是一个包含类别或数据标签的数组或序列。
  • height (array-like): 条形图的高度,表示每个条形的数值。
  • width (float, 可选): 条形的宽度,默认为0.8,可以根据需要进行调整。
  • bottom (array-like, 可选): 条形的底部位置,用于绘制堆叠条形图。
  • align (str, 可选): 条形的对齐方式,可以选择以下值之一:
    • 'center' (默认值): 条形在X轴位置上居中对齐。
    • 'edge': 条形在X轴位置上左对齐。
  • data (DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。
  • **kwargs: 其他关键字参数,用于控制条形图的样式、颜色、标签等属性。常见的关键字参数包括:
    • color (color, 可选): 条形的颜色。
    • edgecolor (color, 可选): 条形的边框颜色。
    • label (str, 可选): 条形的标签,用于添加图例。
    • alpha (float, 可选): 条形的透明度。
    • yerr (float or array-like, 可选): 条形的误差线。
    • capsize (float, 可选): 误差线顶部和底部的帽子大小。

3.用法示例

import matplotlib.pyplot as plt

# 示例1: 绘制简单的条形图
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]
plt.bar(categories, values, color='blue', label='Data')

# 示例2: 绘制堆叠条形图
categories = ['A', 'B', 'C', 'D']
values1 = [3, 7, 2, 5]
values2 = [2, 5, 3, 8]
plt.bar(categories, values1, color='blue', label='Data 1')
plt.bar(categories, values2, color='red', label='Data 2', bottom=values1)

# 示例3: 自定义其他属性
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 2, 5]
plt.bar(categories, values, width=0.6, color='green', edgecolor='black', alpha=0.7, label='Data')

# 示例4: 使用DataFrame作为数据源
import pandas as pd
data = pd.DataFrame({'Category': categories, 'Value': values})
plt.bar('Category', 'Value', data=data, color='purple', label='Data')

# 添加图例
plt.legend()

# 显示图表
plt.show()

效果图

在这里插入图片描述

4. hist()

hist()方法用于绘制直方图,通常用于可视化数据的分布情况。您可以通过传递不同的参数来自定义直方图的外观,包括箱子数量、颜色、累积直方图、堆叠直方图、对数刻度等。直方图常用于观察数据的分布特征,例如数据的中心趋势、离散程度等。这个方法是Matplotlib中用于绘制直方图的核心函数之一。

1.函数签名

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)

2.常用参数解析

  • x (array-like): 数据集,即要绘制直方图的数据。
  • bins (int, sequence, or str, 可选): 控制直方图的箱子(柱子)数量或边界。可以是一个整数,表示箱子的数量;一个序列,表示箱子的边界;或一个字符串,用于指定自动选择箱子数量的算法。
  • range (tuple, 可选): 指定直方图的值范围,以元组 (min, max) 的形式指定。只绘制在该范围内的数据点。
  • density (bool, 可选): 如果为 True,则返回归一化的频数(概率密度),而不是计数。默认为 False
  • weights (array-like, 可选): 指定每个数据点的权重,用于计算直方图。
  • cumulative (bool, 可选): 如果为 True,则绘制累积直方图。默认为 False
  • bottom (scalar, 可选): 用于绘制堆叠直方图时的底部位置。
  • histtype (str, 可选): 指定直方图的类型,可以选择以下值之一:
    • 'bar' (默认值): 绘制常规直方图。
    • 'barstacked': 绘制堆叠直方图。
    • 'step': 绘制阶梯直方图。
    • 'stepfilled': 绘制填充的阶梯直方图。
  • align (str, 可选): 控制箱子的对齐方式,可以选择以下值之一:
    • 'left': 左对齐箱子。
    • 'mid' (默认值): 箱子在中间对齐。
    • 'right': 右对齐箱子。
  • orientation (str, 可选): 控制直方图的方向,可以选择以下值之一:
    • 'vertical' (默认值): 绘制垂直直方图。
    • 'horizontal': 绘制水平直方图。
  • rwidth (float or None, 可选): 控制箱子的宽度,通常在绘制阶梯直方图时使用。
  • log (bool, 可选): 如果为 True,则使用对数刻度绘制直方图。默认为 False
  • color (color or array-like, 可选): 指定直方图的颜色。
  • label (str, 可选): 指定直方图的标签,用于添加图例。
  • stacked (bool, 可选): 如果为 True,则绘制堆叠直方图。默认为 False
  • data (DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。
  • **kwargs: 其他关键字参数,用于控制直方图的样式、颜色、标签等属性。

3.用法示例

import matplotlib.pyplot as plt
import numpy as np

# 示例1: 绘制简单的直方图
data = np.random.randn(1000)  # 生成随机数据
plt.hist(data, bins=20, color='blue', edgecolor='black', alpha=0.7, label='Data')

# 示例2: 绘制累积直方图
data = np.random.randn(1000)  # 生成随机数据
plt.hist(data, bins=20, color='green', edgecolor='black', alpha=0.7, label='Data', cumulative=True)

# 示例3: 绘制堆叠直方图
data1 = np.random.randn(1000)  # 第一组随机数据
data2 = np.random.randn(1000)  # 第二组随机数据
plt.hist([data1, data2], bins=20, color=['red', 'blue'], edgecolor='black', alpha=0.7, label=['Data 1', 'Data 2'], stacked=True)

# 示例4: 自定义其他属性
data = np.random.randn(1000)  # 生成随机数据
plt.hist(data, bins=20, color='purple', edgecolor='black', alpha=0.7, label='Data', density=True)

# 添加图例
plt.legend()

# 显示图表
plt.show()

效果图

在这里插入图片描述

5. pie()

pie()方法用于绘制饼图,它通常用于可视化数据的组成部分占比。您可以通过传递不同的参数来自定义饼图的外观,包括扇形区域的大小、颜色、标

1.函数签名

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

2.常用参数解析

  • x (array-like): 表示扇形区域的大小,通常为一组非负数。
  • explode (array-like, 可选): 控制饼图的扇形区域是否偏移,用于强调某些部分。默认为 None,表示不偏移。
  • labels (list-like, 可选): 指定每个扇形区域的标签文本。如果不指定,将不显示标签。
  • colors (list-like, 可选): 指定每个扇形区域的颜色。如果不指定,将使用默认颜色。
  • autopct (str or callable, 可选): 控制扇形区域上显示的百分比值。可以是字符串格式,也可以是一个可调用函数,用于自定义百分比值的显示。
  • pctdistance (float, 可选): 百分比值标签距离扇形区域中心的距离,以分数半径为单位,默认为0.6。
  • shadow (bool, 可选): 控制是否添加阴影效果,默认为 False
  • labeldistance (float, 可选): 扇形区域标签文本距离扇形区域中心的距离,以分数半径为单位,默认为1.1。
  • startangle (float, 可选): 饼图的起始角度,以度为单位,默认为0度(从正X轴开始)。
  • radius (float, 可选): 饼图的半径,默认为1。
  • counterclock (bool, 可选): 控制饼图的绘制方向,如果为 True,则逆时针绘制;如果为 False,则顺时针绘制。默认为 True
  • wedgeprops (dict, 可选): 扇形区域的属性,例如边框线样式、边框线宽度等。
  • textprops (dict, 可选): 标签文本的属性,例如字体大小、颜色等。
  • center (tuple, 可选): 饼图的中心位置,以坐标 (x, y) 表示,默认为 (0, 0)
  • frame (bool, 可选): 控制是否绘制饼图的圆形边框。默认为 False
  • rotatelabels (bool, 可选): 控制是否旋转标签文本,以避免重叠。默认为 False
  • normalize (bool, 可选): 如果为 True,则将输入的数据 x 规范化为百分比。默认为 False,表示直接使用输入数据。
  • data (DataFrame, 可选): 用于传递数据的DataFrame,可以使用DataFrame的列名作为参数。

用法示例

import matplotlib.pyplot as plt

# 示例1: 绘制简单的饼图
sizes = [30, 20, 15, 35]  # 扇形区域的大小
labels = ['A', 'B', 'C', 'D']  # 扇形区域的标签
colors = ['red', 'green', 'blue', 'orange']  # 扇形区域的颜色
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)

# 示例2: 自定义其他属性
sizes = [30, 20, 15, 35]
labels = ['A', 'B', 'C', 'D']
colors = ['red', 'green', 'blue', 'orange']
explode = (0.1, 0, 0, 0)  # 偏移第一个扇形区域
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90, explode=explode)

# 示例3: 使用DataFrame作为数据源
import pandas as pd
data = pd.DataFrame({'Sizes': sizes, 'Labels': labels})
plt.pie('Sizes', labels='Labels', data=data, autopct='%1.1f%%', startangle=90)

# 示例4: 饼图内外部的控制
sizes = [30, 20, 15, 35]
labels = ['A', 'B', 'C', 'D']
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, radius=0.8, pctdistance=0.85, labeldistance=1.2)

# 示例5: 绘制堆叠饼图
sizes1 = [15, 20, 25]
sizes2 = [10, 15, 20]
plt.pie(sizes1, labels=labels[:3], autopct='%1.1f%%', startangle=90, radius=0.6)
plt.pie(sizes2, labels=labels[3:], autopct='%1.1f%%', startangle=90, radius=0.4)

# 显示图表
plt.show()

效果图

在这里插入图片描述

4.3辅助显示层

1. title() (标题)

title()方法用于设置图表的标题文本。您可以指定标题文本、自定义标题文本的样式、位置和与图表的距离。通常,您可以通过label参数来设置标题文本,通过fontdict参数来自定义标题文本的格式,通过loc参数来指定标题位置,通过pad参数来调整标题与图表的距离,还可以使用额外的关键字参数来进一步自定义标题样式。最后,使用plt.show()来显示图表。

1.函数签名

pythonCopy code
matplotlib.pyplot.title(label, fontdict=None, loc=None, pad=None, **kwargs)

2.常用参数解析

  • label (str): 指定图表的标题文本。
  • fontdict (dict, 可选): 用于指定标题文本的格式,包括字体大小、颜色、类型等。它是一个包含文本属性的字典。
  • loc (str, 可选): 指定标题的位置,常用的位置包括 'center''left''right' 等,默认是 'center'
  • pad (float, 可选): 指定标题与图表的距离,以点为单位。正值将标题向上移动,负值将其向下移动。
  • **kwargs: 其他关键字参数,通常用于传递给标题文本的额外参数。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
plt.plot([1, 2, 3, 4], [1, 2, 1, 3])

# 设置图表的标题
plt.title('Simple Plot')

# 使用fontdict自定义标题文本的样式
title_style = {'fontsize': 16, 'color': 'blue', 'fontweight': 'bold'}
plt.title('Customized Title', fontdict=title_style)

# 移动标题位置并设置距离
plt.title('Title with Custom Position', loc='left', pad=20)

# 使用额外的关键字参数设置标题样式
plt.title('Title with Extra Parameters', fontsize=14, color='green')

# 显示图表
plt.show()

效果图

在这里插入图片描述

2. xlabel()和ylabel()方法 (轴标签)

在pyplot 模块中可以使用xlabel() 和ylabel() 函数设置x 轴y 轴的标签。这两个函数的使用方法非常相似,以xlabel()方法为例

xlabel()ylabel() 方法用于设置X轴和Y轴的标题文本。您可以指定标题文本、自定义标题文本的样式、位置和与刻度标签的距离。通常,您可以通过参数来设置标题文本,通过fontdict参数来自定义标题文本的格式,通过labelpad参数来调整标题与刻度标签的距离,还可以使用额外的关键字参数来进一步自定义标题样式。最后,使用plt.show()来显示图表。

1.函数签名

matplotlib.pyplot.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)

2.常用参数解析

  • xlabel (str): 指定X轴的标题文本。
  • fontdict (dict, 可选): 用于指定标题文本的格式,包括字体大小、颜色、类型等。它是一个包含文本属性的字典。
  • labelpad (float, 可选): 指定X轴标题与X轴刻度标签之间的距离,以点为单位。
  • **kwargs: 其他关键字参数,通常用于传递给X轴标题文本的额外参数。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
plt.plot([1, 2, 3, 4], [1, 2, 1, 3])

# 设置X轴的标题
plt.xlabel('X Axis')

# 使用fontdict自定义X轴标题的样式
xlabel_style = {'fontsize': 14, 'color': 'blue', 'fontweight': 'bold'}
plt.xlabel('Customized X Label', fontdict=xlabel_style)

# 调整X轴标题与X轴刻度的距离
plt.xlabel('X Label with Custom Labelpad', labelpad=10)

# 使用额外的关键字参数设置X轴标题样式
plt.xlabel('X Label with Extra Parameters', fontsize=12, color='green')

# 显示图表
plt.show()

效果图

在这里插入图片描述

3. xlim()和ylim()方法 (限制范围)

xlim 和ylim 很类似,以xlim()为例

xlim()ylim() 函数是Matplotlib库中用于设置X轴和Y轴的限制范围的函数。它们分别用于控制X轴和Y轴的可视范围,从而允许您放大或缩小数据的显示区域。

1.函数签名

matplotlib.pyplot.xlim(left=None, right=None, emit=True, auto=False, xmin=None, xmax=None)

2.常用参数解析

  • left (float, 可选): 指定X轴的左边界,即可视范围的最小X值。
  • right (float, 可选): 指定X轴的右边界,即可视范围的最大X值。
  • emit (bool, 可选): 控制是否触发'xlim_changed'事件,默认为 True,表示触发事件。
  • auto (bool, 可选): 控制是否自动计算限制范围,默认为 False,表示手动指定范围。
  • xmin (float, 可选): left 参数的别名,用于指定X轴的左边界。
  • xmax (float, 可选): right 参数的别名,用于指定X轴的右边界。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y)

# 设置X轴范围
plt.xlim(0, 5)

# 设置X轴范围并禁用事件触发
plt.xlim(1, 3, emit=False)

# 自动计算X轴范围
plt.xlim(auto=True)

# 使用xmin和xmax指定X轴范围的别名
plt.xlim(xmin=1, xmax=3)

# 显示图表
plt.show()

效果图

在这里插入图片描述

**补充: **

autoscale()函数用于自动调整图表的坐标轴范围,以便所有数据都能够完全可视化。您可以选择性地指定要自动缩放的坐标轴,也可以启用或禁用自动缩放。如果需要,还可以使用tight参数将坐标轴范围限制在数据的最小和最大值附近。这个函数在处理不同数据范围的情况下非常有用,可以确保数据始终以最佳方式显示在图表中。

1.函数签名

matplotlib.pyplot.autoscale(enable=True, axis='both', tight=None)

2.常用参数解析

  • enable (bool, 可选): 控制是否启用自动缩放。如果设置为 True(默认值),则启用自动缩放;如果设置为 False,则禁用自动缩放。
  • axis (str, 可选): 指定要自动缩放的坐标轴。可以选择以下值之一:
    • 'both'(默认值): 自动缩放X轴和Y轴。
    • 'x': 仅自动缩放X轴。
    • 'y': 仅自动缩放Y轴。
  • tight (bool, 可选): 如果设置为 True,则会将坐标轴范围设置为“紧凑”,即限制在数据的最小和最大值附近。默认值为 None,表示不应用“紧凑”设置。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y)

# 自动缩放X轴和Y轴
plt.autoscale()

# 仅自动缩放X轴
plt.autoscale(axis='x')

# 仅自动缩放Y轴
plt.autoscale(axis='y')

# 自动缩放并应用"紧凑"设置
plt.autoscale(tight=True)

# 禁用自动缩放
plt.autoscale(enable=False)

# 显示图表
plt.show()

4. xticks()和yticks()方法 (自定义轴要显示的刻度位置和刻度标签)

xticks()和yticks()相似,以xticks为例

xticks()函数用于自定义X轴的刻度位置和标签。您可以指定要显示的刻度位置和标签,也可以使用额外的关键字参数来设置刻度文本的样式。如果需要,您还可以隐藏X轴刻度,或者自定义刻度标签的显示方式,例如使用自定义的格式函数来生成标签。这个函数允许您更灵活地控制X轴刻度的外观和位置。

1.函数签名

matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)

2.常用参数解析

  • ticks (array-like, 可选): 指定X轴刻度位置的序列。它可以是一个数组、列表或其他可迭代对象,用于定义X轴的刻度位置。
  • labels (array-like, 可选): 指定X轴刻度标签的序列。它可以是一个数组、列表或其他可迭代对象,用于定义X轴的刻度标签。
  • **kwargs: 其他关键字参数,通常用于传递给刻度文本的额外参数,例如字体样式、颜色等。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y)

# 自定义X轴刻度位置和标签
custom_ticks = [1, 2, 3, 4]
custom_labels = ['One', 'Two', 'Three', 'Four']
plt.xticks(ticks=custom_ticks, labels=custom_labels)

# 使用额外的关键字参数设置刻度文本的样式
plt.xticks(ticks=custom_ticks, labels=custom_labels, fontsize=12, color='blue')

# 通过传递一个空列表来隐藏X轴刻度
plt.xticks([])

# 通过传递一个函数来自定义刻度标签
def custom_label(x, pos):
    return f'Value: {x:.2f}'
plt.xticks(ticks=custom_ticks, labels=custom_labels, formatter=custom_label)

# 显示图表
plt.show()

效果图

在这里插入图片描述

补充

tick_params() 方法允许您以精确的方式自定义坐标轴刻度和标签的样式和属性,包括刻度方向、长度、宽度、颜色、标签大小、标签颜色等。通过调整这些参数,您可以创建符合特定需求的定制化图表。

1.方法签名

matplotlib.axes.Axes.tick_params(axis='both', **kwargs)

2.常用参数解析

  • axis (str, 可选): 指定要自定义刻度参数的坐标轴,可以选择以下值之一:
    • 'both' (默认值): 自定义X轴和Y轴的刻度参数。
    • 'x': 仅自定义X轴的刻度参数。
    • 'y': 仅自定义Y轴的刻度参数。
  • **kwargs: 其他关键字参数,用于设置刻度和标签的样式和属性。常见的关键字参数包括:
    • which (str, 可选): 指定要自定义的刻度类型,可以选择 'major'(主刻度)或 'minor'(次刻度)。
    • direction (str, 可选): 指定刻度线的方向,可以选择 'in'(朝内)、'out'(朝外)或 'inout'(内外都有)。
    • length (float, 可选): 指定刻度线的长度。
    • width (float, 可选): 指定刻度线的宽度。
    • color (str, 可选): 指定刻度线的颜色。
    • pad (float, 可选): 指定刻度标签与刻度线的距离。
    • labelsize (float or str, 可选): 指定刻度标签的大小。
    • labelcolor (str, 可选): 指定刻度标签的颜色。
    • 其他关键字参数用于控制刻度标签的显示格式等。

3.用法示例

下面是一些使用 tick_params() 方法的示例:

import matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y)

# 自定义X轴和Y轴的刻度参数
plt.tick_params(axis='both', which='both', direction='in', length=5, width=2, color='blue')

# 自定义X轴的刻度标签
plt.tick_params(axis='x', which='major', labelsize=12, labelcolor='green')

# 自定义Y轴的刻度标签
plt.tick_params(axis='y', which='minor', labelsize=10, labelcolor='red')

# 隐藏X轴刻度标签
plt.tick_params(axis='x', which='both', bottom=False, top=False)

# 隐藏Y轴刻度线
plt.tick_params(axis='y', which='both', left=False, right=False)

# 显示图表
plt.show()

5.grid() (网格)

grid()函数用于控制图表中的网格线的显示与样式。您可以通过设置参数来决定是否显示网格线、显示主要刻度或次要刻度的网格线、设置网格线的样式(如颜色、线型、线宽等),以及指定要绘制网格线的坐标轴。这个函数在帮助将数据点与刻度对齐、提高图表可读性时非常有用。

1.函数签名

matplotlib.pyplot.grid(b=None, which='major', axis='both', **kwargs)

2.常用参数解析

  • b (bool, 可选): 控制是否显示网格线。如果设置为 True,则显示网格线;如果设置为 False(默认值),则隐藏网格线。
  • which (str, 可选): 指定要绘制的网格线的类型,可以选择以下值之一:
  • 'major'(默认值): 绘制主要(大)刻度网格线。
  • 'minor': 绘制次要(小)刻度网格线。
  • 'both': 同时绘制主要和次要刻度网格线。
  • axis (str, 可选): 指定要绘制网格线的坐标轴,可以选择以下值之一:
  • 'both'(默认值): 绘制X轴和Y轴的网格线。
  • 'x': 仅绘制X轴的网格线。
  • 'y': 仅绘制Y轴的网格线。
  • **kwargs: 其他关键字参数,通常用于设置网格线的样式和属性,例如颜色、线型、线宽等。

3.用法示例

pythonCopy codeimport matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y = [1, 2, 1, 3]
plt.plot(x, y)

# 显示主要刻度的网格线,默认样式
plt.grid(True)

# 显示次要刻度的网格线,自定义样式
plt.grid(True, which='minor', linestyle='--', linewidth=0.5, color='gray')

# 仅显示X轴的网格线
plt.grid(True, axis='x')

# 仅显示Y轴的网格线,自定义样式
plt.grid(True, axis='y', linestyle='-.', linewidth=0.5, color='green')

# 隐藏网格线
plt.grid(False)

# 使用额外的关键字参数设置网格线样式
plt.grid(True, linestyle='-', linewidth=1, color='blue')

# 显示图表
plt.show()

在这里插入图片描述

6.legend() (图例)

legend()方法用于在Matplotlib图表中添加图例,以便标识不同数据系列或曲线的含义。您可以通过labels参数指定图例标签,通过关键字参数控制图例的位置、外观和标题等。图例使得图表更具可读性,帮助观众理解数据的含义。您可以根据需要自定义图例的各个方面,包括标签、位置、样式等。

1.函数签名

matplotlib.pyplot.legend(labels=None, **kwargs)

2.常用参数解析

  • labels (str or list-like, 可选): 用于指定图例标签的文本。如果提供了一个标签字符串,将创建一个具有该标签的图例项。如果提供了一个列表或元组,将创建多个图例项,每个图例项对应于列表中的一个标签。
  • **kwargs: 其他关键字参数,用于控制图例的外观和位置。一些常见的关键字参数包括:
    • loc (str or int, 可选): 指定图例的位置。可以使用字符串表示位置,如 'upper left''lower right' 等,也可以使用整数表示位置代码。默认值为 'best',表示自动选择最佳位置。
    • title (str, 可选): 指定图例的标题文本。
    • frameon (bool, 可选): 控制是否显示图例的边框,默认为 True
    • fontsize (float, 可选): 控制图例文本的字体大小。
    • title_fontsize (float, 可选): 控制图例标题文本的字体大小。
    • bbox_to_anchor (tuple, 可选): 指定图例的位置,以坐标轴的归一化坐标表示。
    • 其他关键字参数用于设置图例项的属性,如标记、线型、线宽、颜色等。

3.用法示例

import matplotlib.pyplot as plt

# 创建一个简单的图表
x = [1, 2, 3, 4]
y1 = [1, 2, 1, 3]
y2 = [3, 2, 4, 1]

# 绘制两条曲线,并为它们设置标签
plt.plot(x, y1, label='Line 1', linestyle='--', marker='o', color='blue')
plt.plot(x, y2, label='Line 2', linestyle='-', marker='s', color='green')

# 添加图例,自动选择位置
plt.legend()

# 添加图例,自定义位置和标题
plt.legend(loc='upper right', title='Legend')

# 自定义图例项的样式
plt.legend(loc='lower left', title='Custom Legend', fontsize=12, frameon=False)

# 自定义图例项的标记和线型
plt.legend(loc='best', title='Custom Markers and Linestyles', fontsize=12,
           markerscale=1.5, handlelength=3, handletextpad=0.5)

# 显示图表
plt.show()

效果图

在这里插入图片描述

补充方法
在Matplotlib中,这些方法都用于在图形上添加文本、水平线、垂直线、水平线集合、垂直线集合、水平带状区域和垂直带状区域,以及注释。以下是这些方法的简要说明:

  1. text() 方法:

    • text(x, y, s) 方法用于在指定的坐标 (x, y) 处添加文本,文本内容为字符串 s
    • 这个方法可以用来标记图形中的特定点或添加注释。
  2. axhline()axvline() 方法:

    • axhline(y, color, linestyle) 用于在指定的水平位置 y 上添加水平线。
    • axvline(x, color, linestyle) 用于在指定的垂直位置 x 上添加垂直线。
    • 可以通过参数设置线的颜色和线型。
  3. hlines()vlines() 方法:

    • hlines(y, xmin, xmax, color, linestyle) 用于在指定的水平位置 y 上绘制水平线段,从 xminxmax
    • vlines(x, ymin, ymax, color, linestyle) 用于在指定的垂直位置 x 上绘制垂直线段,从 yminymax
    • 同样可以通过参数设置线的颜色和线型。
  4. axhspan()axvspan() 方法:

    • axhspan(ymin, ymax, color, alpha) 用于在指定的垂直区域上绘制带状区域,从 yminymax,可设置颜色和透明度。
    • axvspan(xmin, xmax, color, alpha) 用于在指定的水平区域上绘制带状区域,从 xminxmax,可设置颜色和透明度。
  5. annotate() 方法:

    • annotate(text, xy, xytext, arrowprops) 方法用于在图中的指定点 xy 处添加注释文本 text
    • 可以通过 xytext 参数指定文本的位置,通过 arrowprops 参数添加指向注释的箭头。

这些方法可以帮助你在Matplotlib图形中添加各种注释、线条和区域,以增强图形的信息传达能力。通过合理使用这些方法,你可以自定义图形并突出显示感兴趣的部分。

4.4图片的显示与保存

savefig() 函数用于将当前的Matplotlib图表保存到文件中,可以指定文件名、分辨率、格式等参数。show() 函数用于在图形用户界面中显示当前的Matplotlib图表,通常用于交互式操作或在集成开发环境 (IDE) 中查看图表。这两个函数是Matplotlib中常用的保存和显示图表的方法。

1.savefig()

函数签名

matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w',
     orientation='portrait', papertype=None, format=None,
     transparent=False, bbox_inches=None, pad_inches=0.1,
     frameon=None, metadata=None, *, backend=None)

常用参数解析

  • fname: 要保存的文件名或路径。
  • dpi (可选): 图像的分辨率(每英寸点数),默认为100。
  • facecolor (可选): 图像的背景颜色。
  • edgecolor (可选): 图像的边框颜色。
  • orientation (可选): 图像的方向,可以是 ‘portrait’(纵向,默认)或 ‘landscape’(横向)。
  • papertype (可选): 用于打印的纸张类型。
  • format (可选): 要保存的图像格式,通常为 ‘png’、‘pdf’、‘svg’ 等。
  • transparent (可选): 如果为True,图像的背景将是透明的。
  • bbox_inches (可选): 指定图像的边界框,通常可以使用 ‘tight’ 来自动裁剪空白边缘。
  • pad_inches (可选): 图像周围的填充大小。
  • frameon (可选): 是否在图像周围绘制一个框架,默认为 None(根据当前设备的默认值)。
  • metadata (可选): 图像的元数据,通常是一个字典。
  • backend (可选): 指定要使用的Matplotlib后端。

用法示例

import matplotlib.pyplot as plt

# 示例1: 保存图表为PNG格式
plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
plt.savefig('my_plot.png')

# 示例2: 保存图表为PDF格式,指定分辨率和背景颜色
plt.figure()
plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
plt.savefig('my_plot.pdf', dpi=300, facecolor='lightgray')

# 示例3: 保存图表为SVG格式,透明背景
plt.figure()
plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
plt.savefig('my_plot.svg', transparent=True)

# 示例4: 自动裁剪空白边缘
plt.figure()
plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
plt.savefig('my_plot_tight.png', bbox_inches='tight')

2.show()

函数签名

matplotlib.pyplot.show(*args, **kw)

常用参数解析

show() 函数通常不需要传递额外参数。

用法示例

import matplotlib.pyplot as plt

# 示例: 显示图表
plt.plot([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])
plt.show()

注意

注意保存图片代码应位于plt.show()之前
∵plt.show()会释放figsure资源,∴在显示图像前面保存图像

5.折线图(plot)

以折线的上升或下降来表示统计数量的增减变化的统计图

特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

5.1基础折线图
# 温度变化折线图
import matplotlib.pyplot as plt
%matplotlib inline
import random

# 1、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 中文显示问题
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)

# 3、绘制图像
plt.plot(x, y_shanghai, color="r",linestyle='-.',label="上海")
plt.plot(x, y_beijing, color="b",label="北京")

# 显示图例
plt.legend()
# plt.legend(loc="lower left")
# plt.legend(loc=4)

# 修改x y刻度
x_label = ["11分{}秒".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))

# 显示网格
plt.grid(linestyle='--', alpha=0.5)

# 添加描述 标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("上海、北京11点0分到12点之间的温度变化图示")

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

5.2多坐标系
igure, axes = plt.subplots(nrows=1, ncols=1, **fig_kw)

示例代码

# 温度变化折线图
import matplotlib.pyplot as plt
%matplotlib inline
import random

# 1、准备数据
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 2、创建画布
# plt.figure(figsize=(20,8),dpi=80)
figure, axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

# 3、绘制图像
axes[0].plot(x, y_shanghai, color="r",linestyle='-.',label="上海")
axes[1].plot(x, y_beijing, color="b",label="北京")

# 显示图例
axes[0].legend()
axes[1].legend()
# plt.legend(loc="lower left")
# plt.legend(loc=4)

# 修改x y刻度
x_label = ["11分{}秒".format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label[::5])
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0,40,5))

# 显示网格
axes[0].grid(linestyle='--', alpha=0.5)
axes[1].grid(linestyle='--', alpha=0.5)

# 添加描述 标题
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("上海11点0分到12点之间的温度变化图示")

axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("北京11点0分到12点之间的温度变化图示")

# 4、显示图像
plt.show()

效果图
在这里插入图片描述

5.3数学函数
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np

# 1、准备x、y数据
x = np.linspace(-1,1,1000)
y = 2 * x * x

# 2、创建画布
plt.figure(figsize=(20,8), dpi=80)

# 3、绘制图像
plt.plot(x, y)

plt.grid(linestyle="--",alpha=0.5)

plt.show()

效果图

在这里插入图片描述

6.散点图(scatter)

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

示例代码

# 1、准备数据
x = [225.98, 247.07, 253.14, 457.85, 241.58, 301.01,  20.67, 288.64,
       163.56, 120.06, 207.83, 342.75, 147.9 ,  53.06, 224.72,  29.51,
        21.61, 483.21, 245.25, 399.25, 343.35]

y = [196.63, 203.88, 210.75, 372.74, 202.41, 247.61,  24.9 , 239.34,
       140.32, 104.15, 176.84, 288.23, 128.79,  49.64, 191.74,  33.1 ,
        30.74, 400.02, 205.35, 330.64, 283.45]
# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 3、绘制图像
plt.scatter(x, y)

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

7.柱状图(bar)

排列在工作表的列或行中的数据可以绘制到柱状图中。

特点:绘制连离散的数据,能够一眼看出名个数据的大小,比较数据之间的差别(统计/对比)

7.1柱状图(一)
# 1、准备数据
movie_names = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴', '降魔传','追捕','七十七天','密战','狂兽','其它']
tickets = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]

# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 3、绘制柱状图
x_ticks = range(len(movie_names))
plt.bar(x_ticks, tickets, color=['b','r','g','y','c','m','y','k','c','g','b'])

# 修改x刻度
plt.xticks(x_ticks, movie_names)

# 添加标题
plt.title("电影票房收入对比")

# 添加网格显示
plt.grid(linestyle="--", alpha=0.5)

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

7.2柱状图(二)
# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']

first_day = [10587.6,10062.5,1275.7]
first_weekend=[36224.9,34479.6,11830]

# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 3、绘制柱状图
x_ticks=[i for i in range(3)]
plt.bar(x_ticks, first_day, width=0.2, label="首日票房")
plt.bar([i+0.2 for i in x_ticks], first_weekend, width=0.2, label="首周票房")
##########为何是i+0.2呢,因为前面设置的柱状图宽度width=0.2,为了紧密相连,同时没有重合,因此设置0.2


# 显示图例
plt.legend()

# 修改刻度,即显示坐标轴上的数字或字符,本例即显示电影名字
plt.xticks([i+0.1 for i in x_ticks], movie_name)
###########柱状图宽度为0.2,为了字符名字在中间,因此相对于前面是加了0.1

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

8.直方图(histom)

直方图牵涉统计学的概念,首先要对数据进行分组,然后统计每个分组内数据元的数量。
在坐标系中,横轴标出每个组的端点,纵轴表示频数,每个矩形的高代表对应的频数,称这样的统计图为频数分布直方图。

组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数
组距:每一组两个端点的差

直方图vs柱状图

直方图,形状类似柱状图却有着与柱状图完全不同的含义。

  1. 数据类型
    • 直方图:主要用于连续型数据,将数据分成若干个区间,然后统计每个区间内的数据数量。
    • 柱状图:主要用于离散型数据,通常用于显示各类别的数据数量或频率。
  2. 横纵坐标
    • 直方图:横坐标表示数据的范围或区间,纵坐标表示在该范围内的数据数量或频率。
    • 柱状图:横坐标表示不同的类别或分组,纵坐标表示每个类别的数值。
  3. 数据处理
    • 直方图:通常需要对数据进行分组(binning),将连续的数据划分为若干个区间,然后统计每个区间内的数据数量。
    • 柱状图:可以直接使用离散型数据的类别进行绘制,不需要进行数据的分组。
  4. 用途
    • 直方图:用于描述数据的分布情况,显示数据的中心趋势和离散程度。
    • 柱状图:用于比较不同类别之间的数据,通常用于显示离散数据的频率或数量。
  5. 连续性
    • 直方图:表示数据的连续性,通常没有间隔。
    • 柱状图:表示不同类别之间的离散性,通常有明显的间隔。
  6. 宽度
    • 直方图:各个区间的宽度可以不同,取决于数据的分布和分组方法。
    • 柱状图:各个柱子之间的间隔可以调整,但通常是等宽的。
需求:电影时长分布状况
# 1、准备数据
time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99, 136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144, 105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123, 117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109, 106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123, 111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98, 117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116, 111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]

# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 3、绘制直方图
distance = 2                                           # 组距
group_num = int((max(time) - min(time)) / distance)    # 组数=极差/组距

plt.hist(time, bins=group_num, density=True)

# 修改x轴刻度
plt.xticks(range(min(time), max(time) + 2, distance))

# 添加网格
plt.grid(linestyle="--", alpha=0.5)

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

9.饼图(pie)

用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

特点:分类数据的占比情况(占比)

# 1、准备数据
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']

place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]

# 2、创建画布
plt.figure(figsize=(20, 8), dpi=80)

# 3、绘制饼图
plt.pie(place_count, labels=movie_name, colors=['b','r','g','y','c','m','y','k','c','g','y'], autopct="%1.2f%%")

# 显示图例
plt.legend()

plt.axis('equal')

# 4、显示图像
plt.show()

效果图

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值