当前位置:   article > 正文

数据可视化神器!Matplotlib Python教程 | 从入门到精通绘制各种类型的图形和保存图形_matplotlib 饼图怎么保存图片

matplotlib 饼图怎么保存图片

大家好,我是爱吃熊掌的鱼,今天我要给大家带来一篇有趣开朗的Matplotlib Python教程。Matplotlib是Python中最流行的数据可视化库之一,它可以帮助我们将数据转化为易于理解的图表和图形。无论你是初学者还是专业人士,Matplotlib都是一个非常有用的工具。让我们开始吧!

第一部分:安装Matplotlib

在开始之前,我们需要先安装Matplotlib。在终端或命令行中运行以下命令来安装Matplotlib:

pip install matplotlib
  • 1

如果你使用的是Jupyter Notebook或者是Google Colab这样的交互式笔记本,可以使用以下命令来安装Matplotlib:

pip install matplotlib
  • 1

安装完成后,我们就可以开始使用Matplotlib了。

第二部分:Matplotlib的基础知识

在使用Matplotlib之前,我们需要了解一些基础知识。Matplotlib中最常用的对象是Figure和Axes对象。

  • Figure对象是一个画布,我们可以在上面绘制多个Axes对象。
  • Axes对象是一个包含图形和坐标轴的区域。我们可以在Axes对象上绘制数据。

在Matplotlib中,我们可以使用pyplot子模块来绘制图形。以下是绘制图形的基本步骤:

  1. 创建一个Figure对象。
  2. 创建一个Axes对象。
  3. 在Axes对象上绘制数据。
  4. 显示图形。

下面是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制数据
ax.plot([1, 2, 3, 4], [1, 4, 9, 16])

# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

以上代码创建了一个简单的折线图。我们使用plot()函数在Axes对象上绘制了数据,并使用show()函数显示了图形。

第三部分:绘制不同类型的图形

在Matplotlib中,我们可以绘制多种类型的图形,包括线图、柱状图、散点图、饼图等等。接下来,我们将介绍如何绘制不同类型的图形。

折线图

折线图是一种常见的数据可视化图形,用于显示数据随时间或其他变量的变化情况。在Matplotlib中,我们可以使用plot()函数来绘制折线图。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制折线图
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
ax.plot(x, y)

# 添加标题和标签 
ax.set_title("折线图") 
ax.set_xlabel("X轴") 
ax.set_ylabel("Y轴")
# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述

以上代码创建了一个简单的折线图。我们使用plot()函数在Axes对象上绘制了折线,并使用set_title()、set_xlabel()和set_ylabel()函数添加了标题和标签。

柱状图

柱状图用于比较多个项目之间的数据。在Matplotlib中,我们可以使用bar()函数来绘制柱状图。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制柱状图
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
ax.bar(x, y)

# 添加标题和标签
ax.set_title("柱状图")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")

# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

以上代码创建了一个简单的柱状图。我们使用bar()函数在Axes对象上绘制了柱状图,并使用set_title()、set_xlabel()和set_ylabel()函数添加了标题和标签。

散点图

散点图用于显示两个变量之间的关系。在Matplotlib中,我们可以使用scatter()函数来绘制散点图。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制散点图
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
ax.scatter(x, y)

# 添加标题和标签
ax.set_title("散点图")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")

# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

以上代码创建了一个简单的散点图。我们使用scatter()函数在Axes对象上绘制了散点图,并使用set_title()、set_xlabel()和set_ylabel()函数添加了标题和标签。

饼图

饼图用于显示不同类别的占比情况。在Matplotlib中,我们可以使用pie()函数来绘制饼图。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制饼图
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
ax.pie(sizes, labels=labels)

# 添加标题
ax.set_title("饼图")

# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述

以上代码创建了一个简单的饼图。我们使用pie()函数在Axes对象上绘制了饼图,并使用set_title()函数添加了标题。

第四部分:Matplotlib的高级功能

除了基本的绘图功能之外,Matplotlib还提供了许多高级功能,可以帮助我们更好地控制图形的样式和布局。接下来,我们将介绍一些Matplotlib的高级功能。

子图

Matplotlib中的子图是一种将多个图形组合在一起显示的方式。在Matplotlib中,我们可以使用subplot()函数来创建子图。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个包含2个子图的GridSpec对象
gs = fig.add_gridspec(1, 2)

# 创建第一个子图
ax1 = fig.add_subplot(gs[0, 0])
ax1.plot([1, 2, 3], [1, 2, 3])
ax1.set_title("子图1")

# 创建第二个子图
ax2 = fig.add_subplot(gs[0, 1])
ax2.plot([1, 2, 3], [3, 2, 1])
ax2.set_title("子图2")

# 显示图形
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

以上代码创建了一个包含2个子图的图形。我们使用add_gridspec()函数创建了一个包含1行2列的GridSpec对象,并使用add_subplot()函数在GridSpec对象上创建了两个子图。在设置子图的标题时,我们使用了set_title()函数。

图例

Matplotlib中的图例用于解释图形中不同元素的含义。在Matplotlib中,我们可以使用legend()函数来添加图例。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制折线图
x = [1, 2, 3, 4]
y1 = [1, 4, 9, 16]
y2 = [1, 2, 3, 4]
ax.plot(x, y1, label='数据集1')
ax.plot(x, y2, label='数据集2')

# 添加图例
ax.legend()

# 添加标题和标签
ax.set_title("折线图")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")

# 显示图形
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
  • 25

在这里插入图片描述

以上代码创建了一个包含图例的折线图。我们在绘制折线图时,使用label参数指定了每个数据集的名称,并在添加图例时使用legend()函数。在设置图形的标题和标签时,我们使用了set_title()、set_xlabel()和set_ylabel()函数。

注释

在Matplotlib中,我们可以使用annotate()函数向图形中添加注释。注释可以用于解释图形中的某些特殊点或区域。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制折线图
x = [1, 2, 3, 4]
y = [1, 4, 9, 16] 
ax.plot(x, y)

# 添加注释

ax.annotate('最大值', xy=(3, 9), xytext=(2, 12), arrowprops=dict(facecolor='red', shrink=0.05))

# 添加标题和标签

ax.set_title("折线图") 
ax.set_xlabel("X轴") 
ax.set_ylabel("Y轴")

# 显示图形

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
  • 25
  • 26

在这里插入图片描述

以上代码创建了一个包含注释的折线图。我们使用annotate()函数向图形中添加注释,指定注释文本的位置和箭头的属性。在设置图形的标题和标签时,我们使用了set_title()、set_xlabel()和set_ylabel()函数。

保存图形

在Matplotlib中,我们可以使用savefig()函数将图形保存为文件。Matplotlib支持多种文件格式,包括PNG、PDF、SVG和EPS等。

以下是一个简单的例子:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
# 创建一个Figure对象
fig = plt.figure()

# 创建一个Axes对象
ax = fig.add_subplot(111)

# 在Axes对象上绘制折线图
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
ax.plot(x, y)

# 添加标题和标签
ax.set_title("折线图")
ax.set_xlabel("X轴")
ax.set_ylabel("Y轴")

# 保存图形
plt.savefig('line_chart.png')

# 显示图形
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

在这里插入图片描述

以上代码将绘制的折线图保存为PNG格式的文件。我们在调用savefig()函数时,指定了保存文件的名称和格式。

问题总结

错误1

问题错误代码
C:\Program Files\JetBrains\PyCharm 2022.3.3\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py:68: UserWarning: Glyph 36724 (\N{CJK UNIFIED IDEOGRAPH-8F74}) missing from current font.
  FigureCanvasAgg.draw(self)
C:\Program Files\JetBrains\PyCharm 2022.3.3\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py:68: UserWarning: Glyph 25240 (\N{CJK UNIFIED IDEOGRAPH-6298}) missing from current font.
  FigureCanvasAgg.draw(self)
C:\Program Files\JetBrains\PyCharm 2022.3.3\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py:68: UserWarning: Glyph 32447 (\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from current font.
  FigureCanvasAgg.draw(self)
C:\Program Files\JetBrains\PyCharm 2022.3.3\plugins\python\helpers\pycharm_matplotlib_backend\backend_interagg.py:68: UserWarning: Glyph 22270 (\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from current font.
  FigureCanvasAgg.draw(self)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
问题原因

这些警告是因为缺少相应字形的字体。这些字形是CJK(中日韩)统一表意文字(Unicode中的汉字和其他东亚象形文字)。如果你需要在Matplotlib图表中使用这些字形,可以尝试安装包含它们的字体,比如SimSun、SimHei、STSong等中文字体。

解决方案

在Matplotlib中,你可以使用rcParams参数来设置全局的字体,或者在每个图表中单独设置字体。比如,你可以使用如下代码将全局的字体设置为SimHei:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
  • 1
  • 2

或者在绘制图表时,使用如下代码设置字体:

import matplotlib.pyplot as plt
plt.plot(x, y)
plt.xlabel('横轴', fontproperties='SimHei')
plt.ylabel('纵轴', fontproperties='SimHei')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5

这样就可以使用SimHei字体绘制图表了,就不会出现那些报错了。

有其他问题可以私信我,看到就会回的。

如果我的博客对你有帮助,请三连谢谢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/348752
推荐阅读
相关标签
  

闽ICP备14008679号