Python基础教程之Matplotlib图形绘制详解

 更新时间:2023年07月12日 08:59:12   作者:陆理手记  
Matplotlib是一个广泛使用的数据可视化库,提供了丰富的绘图功能,用于创建各种类型的静态、动态和交互式图形,本文将通过多个例子给大家详细介绍一下Python的Matplotlib图形绘制,需要的朋友可以参考下

1.引言

以下是Matplotlib的一些主要特点:

  • 简单易用:Matplotlib提供了简单而直观的API,使得绘图变得容易上手和使用。
  • 多样化的图形:它支持各种常见的图形类型,包括线图、散点图、柱状图、饼图、等高线图、3D图等。你可以根据需求选择合适的图形进行绘制。
  • 高度可定制性:Matplotlib提供了大量的参数选项,你可以自定义图形的各个方面,包括线型、颜色、标签、标题、网格等,以满足特定的需求。
  • 高质量的输出:Matplotlib能够生成高质量的图形输出,支持多种输出格式,如PNG、JPEG、PDF等,方便在论文、报告和演示文稿中使用。
  • 与NumPy集成:Matplotlib与NumPy紧密集成,可以直接接收NumPy数组作为输入数据,并且能够方便地处理和呈现这些数据。
  • 支持交互式绘图:除了静态图形,Matplotlib还提供了交互式绘图的功能,可以通过添加交互元素和事件处理来实现用户与图形的交互操作。

首先,确保你已经安装了matplotlib和NumPy模块,可以通过以下命令来安装它们:

pip install matplotlib numpy

接下来,导入需要的模块:

import matplotlib.pyplot as plt
import numpy as np

2. 绘制折线图:

x = np.linspace(0, 2*np.pi, 100)  # 在0到2π之间生成100个点作为x轴坐标
y = np.sin(x)                     # 通过sin函数生成对应的y轴坐标
plt.plot(x, y)                    # 绘制折线图
plt.xlabel('x')                   # 设置x轴标签
plt.ylabel('y')                   # 设置y轴标签
plt.title('Sin Function')          # 设置标题
plt.show()                        # 显示图形

3. 绘制散点图

x = np.random.rand(100)    # 生成100个随机数作为x轴坐标
y = np.random.rand(100)    # 生成100个随机数作为y轴坐标
plt.scatter(x, y)          # 绘制散点图
plt.xlabel('x')            # 设置x轴标签
plt.ylabel('y')            # 设置y轴标签
plt.title('散点图')  # 设置标题
plt.show()                 # 显示图形

绘制的图形如下,我们可以看到,标题本应当显示散点图,但实际上显示的却是三个小方格。为什么会这样呢?

原因在于 matplotlib 的作者在设计时并没有直接支持中文,主要原因是中文字体渲染较为复杂,并且涉及到不同操作系统、字体库和编程环境的差异。这使得在绘制中文时可能遇到各种字体显示问题,例如乱码、错位等。但是,我们可以通过一些方法来解决这个问题。

4.解决中文显示问题

在使用 matplotlib绘图时出现中文显示问题,可以按照以下步骤解决:

1、配置字体路径

这种方法是墙裂不推荐的,原因是需要修改matplotlib本身的配置文件,同样的代码换个环境执行,可能中文就显示异常了,但也在这介绍一下。找到系统中已安装的中文字体文件,通常位于Windows的C:\Windows\Fonts目录下,或者其他操作系统中类似的位置。你也可以使用如下代码查看:

import matplotlib.font_manager as fm
# 获取系统中所有已安装的字体信息
font_info = fm.findSystemFonts()
# 输出每个字体的名称和路径
for font_path in font_info:
    font_prop = fm.FontProperties(fname=font_path)
    font_name = font_prop.get_name()
    print(f"Font Name: {font_name}")
    print(f"Font Path: {font_path}\n")

将字体文件路径添加到matplotlib的配置文件中。可以在Python中执行以下代码查看matplotlibrc配置文件的所在路径。

import matplotlib
print(matplotlib.matplotlib_fname())

找到下图所示这几行配置,这里我将sans-serif改成 微软雅黑字体:Microsoft YaHei,并取消这几行的注释,运行后可以看到中文正常显示。

2.修改rcParams来达到效果,这种方法适合用于修改默认字体、默认样式等,对于字体个性化需求较高的图形,不建议使用此方法。

import matplotlib.pyplot as plt
#####################################
from matplotlib import rcParams
rcParams['font.family'] = 'Microsoft YaHei'

3.设置FontProperties,推荐使用此方法来对字体进行设置,比较灵活

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager  import FontProperties
microsoft_yahei_font = FontProperties('Microsoft YaHei')
fang_song_font = FontProperties(fname=r'C:\Windows\Fonts\simfang.ttf')
x = np.random.rand(100)    # 生成100个随机数作为x轴坐标
y = np.random.rand(100)    # 生成100个随机数作为y轴坐标
plt.scatter(x, y)          # 绘制散点图
plt.xlabel('x轴')            # 设置x轴标签
plt.ylabel('y轴',fontproperties=microsoft_yahei_font)            # 设置y轴标签
plt.title('散点图',fontproperties=fang_song_font)  # 设置标题
plt.show()

绘制的图形中,可以看到上述设置字体及未设置的区别,推荐使用此方法。

5.划分子图

在Matplotlib中,使用子图(Subplot)可以在一个绘图窗口中创建多个小的坐标系,从而将多个图形放置在同一个图像中,并进行灵活的布局。

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np
# 设置字体为微软雅黑
font = FontProperties('Microsoft YaHei')
# 生成随机数据
categories = ['A', 'B', 'C', 'D']
values = np.random.rand(len(categories))
# 创建一个包含两个子图的画布
fig, ax = plt.subplots(2, 1)
# 在第一个子图上绘制柱状图
ax[0].bar(categories, values)
ax[0].set_title('柱状图', fontproperties=font)
# 在第二个子图上绘制另一个饼图
# 生成随机数据
sizes = np.random.rand(len(categories))
ax[1].pie(sizes, labels=categories, autopct='%1.1f%%')
ax[1].set_title('带百分比的饼图',  fontproperties=font)
# 调整子图之间的间距和布局
plt.tight_layout()
# 显示图形
plt.show()

通过调整subplots()函数的参数,你可以创建不同尺寸和布局的子图,以满足你的需求。同时,你也可以使用其他的matplotlib绘图函数在子图中绘制各种类型的图形。

6.总结

Python的Matplotlib是一个功能强大的数据可视化库,可以用于创建各种类型的静态、动态和交互式图形。它提供了广泛的绘图选项和配置参数,使用户能够根据自己的需求定制图形。常见的一些用法如下:

1、使用不同的matplotlib绘图函数创建所需的图形,如折线图、散点图、柱状图、饼图等。常用的绘图函数有plt.plot()plt.scatter()plt.bar()plt.pie()等。

2、配置图形属性:可以使用各种属性设置函数来自定义图形,如标题、坐标轴标签、图例、线型、颜色、标记符号等。常用的属性设置函数有plt.title()plt.xlabel()plt.ylabel()plt.legend()plt.grid()等。

3、显示图形:通过调用plt.show()函数显示图形。该函数可以在所有绘图操作完成后调用,也可以在每次绘制完一个子图后调用,以便逐个显示子图。

4、保存图形:通过使用plt.savefig()函数将绘制的图形保存为文件,常见的文件格式包括PNG、JPEG、PDF等。

5、绘制多个子图:使用plt.subplots()函数可以创建一个包含多个子图的画布,然后在不同的子图上绘制不同的图形。可以使用索引或布局参数来控制子图的位置和排列方式。

Matplotlib提供了丰富的样式选项和布局控制功能,可以帮助美化图形和调整图形的形状、大小和比例。除了基本的Matplotlib库外,还有一些扩展库可以进一步增强Matplotlib的功能。例如,Seaborn可以提供更漂亮的图形样式,Basemap可以绘制地理地图,3D可视化库可以创建三维图形等等。

总之,Matplotlib是Python中最常用和最受欢迎的数据可视化库之一。通过灵活的接口和强大的功能,它可以满足各种数据可视化需求,并帮助用户以可视化的方式更好地理解和呈现数据。

以上就是Python基础教程之Matplotlib图形绘制详解的详细内容,更多关于Python Matplotlib图形绘制的资料请关注脚本之家其它相关文章!

相关文章

  • Django实战之用户认证(初始配置)

    Django实战之用户认证(初始配置)

    这篇文章主要介绍了Django实战之用户认证(初始配置),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Python collections中的双向队列deque简单介绍详解

    Python collections中的双向队列deque简单介绍详解

    这篇文章主要介绍了Python collections中的双向队列deque简单介绍详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 100 个 Python 小例子(练习题四)

    100 个 Python 小例子(练习题四)

    这篇文章主要给大家分享100 个 Python 小例子,前文分享了一二三,本文的四十最后一篇了,这篇就把100道python小练习全分享完了,感兴趣的小伙伴也可以去练习前几期内容,洗碗给这几篇文章给你的学习带来帮助
    2022-01-01
  • python实现读取图像文件并获取到像素数组的4种方法详解

    python实现读取图像文件并获取到像素数组的4种方法详解

    这篇文章主要为大家详细介绍了python实现读取图像文件并获取到像素数组的4种方法并进行对比,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-03-03
  • python3读取文件指定行的三种方法

    python3读取文件指定行的三种方法

    考虑到深度学习领域中的数据规模一般都比较大,尤其是训练集,这个限制条件对应到实际编程中就意味着,我们很有可能无法将整个数据文件的内容全部都加载到内存中。那么就需要一些特殊的处理方式,本文将要介绍的是从文件中只读取特定行的内容的3种解决方案。
    2021-05-05
  • Python快速排序算法实例分析

    Python快速排序算法实例分析

    这篇文章主要介绍了Python快速排序算法,简单说明了快速排序算法的原理、实现步骤,并结合具体实例分析了Python实现快速排序的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Python解决走迷宫问题算法示例

    Python解决走迷宫问题算法示例

    这篇文章主要介绍了Python解决走迷宫问题算法,结合实例形式分析了Python基于二维数组的深度优先遍历算法解决走迷宫问题相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • python如何修改文件时间属性

    python如何修改文件时间属性

    这篇文章主要介绍了python修改文件时间属性的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python中列表复制的常用方法解析

    Python中列表复制的常用方法解析

    在Python编程中,经常需要对列表进行复制或克隆操作,以便保护原始数据或创建独立的副本,本文将详细介绍如何在Python中进行列表克隆,以及如何选择合适的方法来保护数据,希望对大家有所帮助
    2024-02-02
  • Python笔记之代理模式

    Python笔记之代理模式

    这篇文章主要为大家详细介绍了Python笔记之代理模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论