大家好,我是爱吃熊掌的鱼,今天我要给大家带来一篇有趣开朗的Matplotlib Python教程。Matplotlib是Python中最流行的数据可视化库之一,它可以帮助我们将数据转化为易于理解的图表和图形。无论你是初学者还是专业人士,Matplotlib都是一个非常有用的工具。让我们开始吧!
第一部分:安装Matplotlib
在开始之前,我们需要先安装Matplotlib。在终端或命令行中运行以下命令来安装Matplotlib:
pip install matplotlib
如果你使用的是Jupyter Notebook或者是Google Colab这样的交互式笔记本,可以使用以下命令来安装Matplotlib:
pip install matplotlib
安装完成后,我们就可以开始使用Matplotlib了。
第二部分:Matplotlib的基础知识
在使用Matplotlib之前,我们需要了解一些基础知识。Matplotlib中最常用的对象是Figure和Axes对象。
- Figure对象是一个画布,我们可以在上面绘制多个Axes对象。
- Axes对象是一个包含图形和坐标轴的区域。我们可以在Axes对象上绘制数据。
在Matplotlib中,我们可以使用pyplot子模块来绘制图形。以下是绘制图形的基本步骤:
- 创建一个Figure对象。
- 创建一个Axes对象。
- 在Axes对象上绘制数据。
- 显示图形。
下面是一个简单的例子:
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()
以上代码创建了一个简单的折线图。我们使用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()
以上代码创建了一个简单的折线图。我们使用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()
以上代码创建了一个简单的柱状图。我们使用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()
以上代码创建了一个简单的散点图。我们使用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()
以上代码创建了一个简单的饼图。我们使用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()
以上代码创建了一个包含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()
以上代码创建了一个包含图例的折线图。我们在绘制折线图时,使用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()
以上代码创建了一个包含注释的折线图。我们使用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()
以上代码将绘制的折线图保存为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)
问题原因
这些警告是因为缺少相应字形的字体。这些字形是CJK(中日韩)统一表意文字(Unicode中的汉字和其他东亚象形文字)。如果你需要在Matplotlib图表中使用这些字形,可以尝试安装包含它们的字体,比如SimSun、SimHei、STSong等中文字体。
解决方案
在Matplotlib中,你可以使用rcParams参数来设置全局的字体,或者在每个图表中单独设置字体。比如,你可以使用如下代码将全局的字体设置为SimHei:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
或者在绘制图表时,使用如下代码设置字体:
import matplotlib.pyplot as plt
plt.plot(x, y)
plt.xlabel('横轴', fontproperties='SimHei')
plt.ylabel('纵轴', fontproperties='SimHei')
plt.show()
这样就可以使用SimHei字体绘制图表了,就不会出现那些报错了。
有其他问题可以私信我,看到就会回的。
如果我的博客对你有帮助,请三连谢谢。