Python数据可视化 - Matplotlib教程

文章目录


前言

在数据分析和可视化的过程中,图形的呈现往往是理解数据的重要环节。Matplotlib作为Python中最流行的绘图库之一,提供了丰富的功能和灵活的接口,使得用户能够轻松创建各种类型的图表。无论是简单的线图、散点图,还是复杂的3D图形和小提琴图,Matplotlib都能满足不同的需求。

本篇文章将详细介绍Matplotlib的基本使用,包括安装、核心模块Pyplot的功能、各种图形的绘制方法以及如何自定义图表的样式和属性。通过示例代码和图表展示,读者将能够掌握如何利用Matplotlib进行高效的数据可视化,进而提升数据分析的效果和效率。


一、Matplotlib简介及安装

1. Matplotlib简介

Matplotlib是一个强大的Python绘图库,最初由John D. Hunter于2003年创建。它提供了一个类似于MATLAB的绘图接口,能够生成高质量的2D和3D图形。Matplotlib的核心是pyplot模块,它提供了类似于MATLAB的绘图API,使得用户可以轻松地创建各种图表。

2. 安装Matplotlib

在开始使用Matplotlib之前,需要先安装它,通过以下命令安装:

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

二、Matplotlib Pyplot

1. Pyplot介绍

Matplotlib是Python中一个非常强大的数据可视化库,而Pyplot则是Matplotlib的一个子模块,它提供了一个类似于MATLAB风格的绘图接口,使得用户可以方便快捷地创建图表。通过Pyplot,用户可以轻松绘制线图、散点图、条形图、直方图等多种类型的图形,并对这些图形进行定制和优化。Pyplot的设计目标是让用户即使没有深入了解Matplotlib的内部机制,也能快速上手并制作出美观的数据可视化结果。

2. Pyplot中方法介绍

2.1 创建和管理图形

在Matplotlib的Pyplot模块中,创建和管理图形是进行数据可视化的基本步骤。

下面是一些关键方法及其功能:

方法名 说明
figure() 创建一个新的图形窗口,可以通过参数指定图形大小、分辨率等属性。例如,plt.figure(figsize=(width, height)) 可以设置图窗大小。
subplot() 在一个图形窗口中添加子图,支持多种布局方式。比如,plt.subplot(2, 2, 1) 表示在一个2行2列的网格中的第1个位置创建子图。
subplots() 更灵活地创建包含多个子图的图形,并返回图形和子图对象的引用,方便后续操作。如 (fig, axes) = plt.subplots(nrows=2, ncols=2) 创建2x2的子图矩阵。
close() 关闭当前图形或通过指定ID关闭特定图形,有助于释放内存资源。使用如 plt.close(fig)plt.close('all') 来关闭所有图形。

2.2 绘制图形

绘制图形是数据可视化的中心任务,Pyplot提供了丰富的绘图函数来满足不同的需求。

方法名 说明
plot() 基础线条图,可以用来展示趋势或关系。通过传入x轴和y轴的数据,如 plt.plot(x, y)
scatter() 散点图用于显示两个变量的相关性,plt.scatter(x, y, s=None, c=None) 其中s为点的大小,c为颜色。
bar() 简单条形图,适用于比较分类数据。如 plt.bar(x, height, width=0.8),其中x为类别,height为高度。
barh() 水平条形图,与bar()相似但方向相反。
hist() 直方图,用于展示数值分布情况。例如,plt.hist(data, bins=10) 将数据分为10个区间。
boxplot() 箱型图,用于显示一组数据的分散情况。
pie() 饼图,用于表示各部分占整体的比例。如 plt.pie(sizes, labels=labels, autopct='%1.1f%%')

2.3 设置图形属性

设置图形属性对于提高图表的可读性和美观度至关重要。

方法名 说明
title() 添加标题,可以通过 plt.title('My Plot Title') 设置图表标题。
xlabel() 设置x轴标签,如 plt.xlabel('X Axis Label')
ylabel() 设置y轴标签,用法同上。
xticks() 控制x轴刻度的位置和标签,plt.xticks(ticks, labels)
yticks() 类似于xticks(),但作用于y轴。
legend() 添加图例,帮助解释不同数据系列。如 plt.legend(['Series 1', 'Series 2'])
grid() 添加网格线以便于读取数据点的位置,plt.grid(True)
axis() 控制坐标轴的属性,包括范围、比例等。

2.4 保存和展示

完成图表绘制后,下一步就是将其保存或展示给观众。

方法名 说明
show() 显示所有打开的图形窗口,plt.show() 必须调用才能在屏幕上显示图形。
savefig() 将当前图形保存为文件,支持多种格式(如PNG、PDF、SVG)。例如,plt.savefig('my_figure.png')

三、Matplotlib绘图标记

1. 介绍

在Matplotlib中,绘图标记(markers)是用于强调数据点的符号。它们可以被添加到各种类型的线条图中,比如简单的plot线图,或者散点图scatter等。使用不同的标记可以帮助我们更清晰地表达数据的特点或区分不同的数据序列。下面是一些关于如何在绘图中应用和自定义标记的信息:

2. 基本用法

在绘制线图时,可以通过plot()函数的marker参数指定标记类型。

例如:

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]

plt.plot(x, y, marker='o')  # 使用圆圈作为标记
plt.show()

这里,'o'表示圆形标记。你可以尝试其他字符来改变标记形状,如's'代表正方形,'^'代表上三角形等。

3. 标记大小与颜色

你可以通过markersize参数调整标记大小,以及通过markerfacecolormarkeredgecolor分别设置标记填充色和边缘颜色。示例代码如下:

plt.plot(x, y, marker='o', markersize=10, markerfacecolor='red', markeredgecolor='blue')
plt.show()

4. 标记样式列表

以下是一些常用的标记样式:

  • '.' 点标记
  • ',' 像素标记
  • 'o' 圆圈
  • 'v' 下三角
  • '^' 上三角
  • '<' 左三角
  • '>' 右三角
  • '1' 类似三叉戟向下
  • '2' 类似三叉戟向上
  • '3' 左三叉戟
  • '4' 右三叉戟
  • 's' 正方形
  • 'p' 五边形
  • '*' 星号
  • 'h' 六边形侧边
  • 'H' 六边形点
  • '+' 加号
  • 'x' x标记
  • 'D' 菱形
  • 'd' 细菱形
  • '|' 水平线标记
  • '_' 垂直线标记

四、Matplotlib绘图线

1. 线型基础

在Matplotlib中,线型(linestyle 或 ls)用于指定线条的样式。除了实线外,还可以绘制虚线、点划线等多种样式。这为数据可视化提供了丰富的表现形式。

线型代码 描述
'-' 实线
'--' 虚线
'-.' 点划线
':' 点线

示例:

import matplotlib.pyplot as plt
import numpy as np

# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linestyle='-', label='实线')  # 实线
plt.plot(x, np.cos(x), linestyle='--', label='虚线')  # 虚线
plt.plot(x, np.tan(x), linestyle='-.', label='点划线')  # 点划线
plt.plot(x, -np.sin(x), linestyle=':', label='点线')  # 点线
plt.legend()
plt.show()

结果如下图所示:

在这里插入图片描述

2. 线宽与颜色

可以通过设置linewidth(或简写为lw)来调整线条的宽度,并使用color(或简写为c)来改变线条的颜色。例如:

plt.plot(x, np.sin(x), linewidth=2, color='blue')  # 设置线宽和颜色

3. 多重线型组合

在同一图表中,可以结合不同的线型、颜色、标记等来区分多条线。这对于展示多组数据特别有用:

import matplotlib.pyplot as plt
import numpy as np

# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 解决负号'-'显示为方块的问题

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), linestyle='-', color='blue', label='Sine')
plt.plot(x, np.cos(x), linestyle='--', color='red', label='Cosine')
plt.legend()
plt.show()

结果如下图所示:

在这里插入图片描述


五、Matplotlib轴标签、标题和网格线

1. 轴标签方法及参数解释

1.1 X轴标签方法及参数解释

为X轴添加标签是提高图表可读性的重要步骤,可以通过xlabel()函数来实现。

使用的方法:

plt.xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)
参数名 描述
xlabel 字符串,X轴的标签文本。
fontdict 字典类型,用于覆盖默认字体属性(如大小、颜色等)。
labelpad 标签与轴的距离,默认值为None,可以根据需要调整。
**kwargs 可以传递其他文本属性,比如位置(loc='left', 'center', 'right')。

1.2 Y轴标签方法及参数解释

类似地,Y轴标签可以通过ylabel()函数来设置。

使用的方法:

plt.ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
参数名 描述
ylabel 字符串,Y轴的标签文本。
fontdict 字典类型,用于覆盖默认字体属性(如大小、颜色等)。
labelpad 标签与轴的距离,默认值为None,可以根据需要调整。
**kwargs 可以传递其他文本属性,比如位置(loc='top', 'center', 'bottom')。

1.3 Z轴标签方法及参数解释

对于三维图形,Z轴的标签可以通过zlabel()函数来设置,该函数属于Axes3D模块。

使用的方法:

ax.set_zlabel(zlabel, fontdict=None, labelpad=None, **kwargs)
参数名 描述
zlabel 字符串,Z轴的标签文本。
fontdict 字典类型,用于覆盖默认字体属性(如大小、颜色等)。
labelpad 标签与轴的距离,默认值为None,可以根据需要调整。
**kwargs 可以传递其他文本属性。

2. 标题方法及参数解释

为图表添加标题有助于快速传达图表的主要信息或主题,这可以通过title()函数来实现。

使用的方法:

plt.title(label, fontdict=None, loc='center', pad=None, **kwargs)
参数名 描述
label 字符串,标题文本内容。
fontdict 字典类型,用于覆盖默认字体属性(如大小、颜色等)。
loc 标题位置,可以是'center', 'left', 'right'之一,默认为中心对齐。
pad 标题与图表顶部的距离,默认值为None。
**kwargs 其他文本属性,比如颜色等。

3. 网格线方法及参数解释

在Matplotlib中,添加网格线可以帮助更轻松地读取图表上的数据点位置,提升图表的可读性。这可以通过grid()函数来实现。

使用的方法:

plt.grid(b=None, which='major', axis='both', **kwargs)
参数名 描述
b 控制是否启用网格线(布尔值)。
which 指定显示主要(‘major’)、次要(‘minor’)还是两者(‘both’)的网格线。
axis 决定是在x轴、y轴还是两个轴(‘both’)上显示网格线。
**kwargs 允许通过关键字参数设置网格线的颜色、宽度、样式等属性,例如color='red', linestyle='--'

示例代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x))

# 添加网格线
plt.grid(True, which='major', axis='both', linestyle='--', linewidth=0.5, color='gray')

plt.show()

在这个例子中,我们启用了网格线,并设置了它们为虚线形式(linestyle='--'),线宽为0.5(linewidth=0.5),颜色为灰色(color='gray'),并且应用于x轴和y轴的所有主刻度上。通过调整这些参数,可以根据需要自定义网格线的外观,使其更好地适应你的图表设计。


六、Matplotlib基本绘图

1. 折线图

1.1 方法及参数解释

在Matplotlib中,绘制折线图主要使用pyplot模块中的plot()方法。

以下是该方法的一些关键参数及其解释:

参数名 描述 示例值
x, y 数据点的坐标,分别表示x轴和y轴的数据。最少需要提供这两个参数。 [1, 2, 3], [4, 5, 6]
color 设置线条的颜色。可以使用颜色名称或RGB值等。 'blue', '#00FF00'
linestyle 设置线条样式,如实线、虚线等。 '-', '--', ':'
linewidth 设置线条宽度。 2.0, 4.0
marker 标记数据点的符号。 'o', 's', '^'
markersize 设置标记大小。 8, 12
alpha 设置线条和标记的透明度(0至1之间)。 0.5, 1.0
label 为线条添加标签,用于图例显示。 '样本数据'

1.2 代码示例

下面是一个简单的例子,演示如何使用上述参数来创建一个折线图:

import matplotlib.pyplot as plt

# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 解决负号'-'显示为方块的问题

# 准备数据
x = [0, 1, 2, 3, 4, 5]
y = [0, 1, 4, 9, 16, 25]

# 创建折线图
plt.plot(x, y, color='blue', linestyle='-', marker='o',
         markersize=8, alpha=0.7, label='平方函数')

# 添加标题和坐标轴标签
plt.title("简单折线图示例")  # 使用中文标题
plt.xlabel("X轴")           # 使用中文X轴标签
plt.ylabel("Y轴")           # 使用中文Y轴标签

# 显示图例
plt.legend()

# 显示网格
plt.grid(True)

# 展示图表
plt.show()

结果如下图所示:

在这里插入图片描述

2. 散点图

2.1 方法及参数解释

在Matplotlib中,绘制散点图主要使用pyplot模块中的scatter()方法。

以下是该方法的一些关键参数及其解释:

参数名 描述 类型 默认值
x, y 数据点的坐标,分别表示X轴和Y轴的数据。长度必须相同。 array-like 必需(无默认值)
s 标记点的大小。可以是单个数值或一个数组,如果是数组,其长度必须与xy相同。 scalar or array-like 20
c 颜色或颜色数组。可以是一个单一的颜色格式字符串,也可以是一个数值数组用于颜色映射。 color or array-like 'b'
marker 数据点标记样式。例如:'o'(圆圈)、's'(正方形)、'*'(星形)。 MarkerStyle 'o'
cmap c为浮点数数组时使用的颜色映射表。如:'viridis', 'plasma'等。 Colormap None
alpha 设置点的透明度(0至1之间)。 scalar None
label 为散点图添加标签,用于图例显示。 str None

2.2 代码示例

以下是一个简单的例子,演示如何使用上述参数来创建一个散点图,并展示如何通过颜色和大小来表达额外的信息。

import numpy as np
import matplotlib.pyplot as plt

# 设置支持中文的字体,这里以黑体为例
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams

猜你喜欢

转载自blog.csdn.net/zcs2312852665/article/details/145596331
今日推荐