曾经我在高中的时候有一篇数学探索的小作业,其中我需要画出一张比较复杂的函数图。由于 X 和 Y 的坐标轴标签都需要一定的自定义,所以微软 Office 自带的画图工具自然无法满足我的要求。经过一段时间的寻找,我终于找到了最适合自己的工具:那就是用 Python。 其实,「用 Python」这个说法比较笼统,我们在这篇文章其实是要学习 Python 的一个模组:matplotlib 的简单使用方法。 使用 matplotlib 这个模组,我们就可以摆脱微软 Office 的传统画图方法。以此带来的新画图方法就是通过数学式的方法来画图。更加有用的是,我们可以方便地自定义图表,画出更好看、更美观的效果。 诚然,使用 matplotlib 画图离不开使用编程语言。但是请务必不要害怕接触编程:画出一个简单的图只需要几行非常简单并且易于理解的代码。画出复杂一些的图片也会有一些常识和修正,不过请放心,本篇文章将不会涉及任何高级编程知识,零基础也能上手。 安装必要的软件本篇文章中,我们涉及到的软件只有一个免费软件,那就是 Anaconda。你可以在 这个网站 上下载到 Anaconda,软件完全免费,并支持 Windows 和 macOS。如果你有安装 Visual Studio,你可以直接在 Visual Studio 内下载并安装 Anaconda。通常我们会选择 Python 3.6 版本。 安装完成之后,你会在开始菜单中的 Anaconda 文件夹中看到 Spyder 这个应用,我们打开这个应用,迎面而来的就是一个代码编辑器,我们就要在这个代码编辑器内写出所有画图的代码。 编写代码:初步了解 matplotlib打开 Spyder,我们就会看到屏幕的左边是代码编辑区域,屏幕的左下角则是输出区域。在这个步骤,我们将主要操作屏幕的左边,也就是代码编辑区域,来输入我们画图用到的代码。 导入模组编辑代码的第一步,就是告诉我们要写的程序要包括什么模组。简单来说我们就是要告诉程序,我们要在程序内包括什么功能。首先我们输入以下代码: import matplotlib.pyplot as pltimport numpy as np 这两行代码中, 在这里, 开始编写在以上我们做完程序的铺垫之后,我们就可以正式开始编写画图的代码了。首先,我们要定义 X 的域,添加以下代码表示: x = np.linspace(-1, 1, 256) 在这行代码中,我们定义了 X 轴的最小值和最大值,括号中第一个数字 目前这部分很简单,但是 matplotlib 强大的地方在于可以利用其他的常量来定义边界,请看下面的例子: x = np.linspace(-np.pi, np.pi, 256) 在这个例子中,这行代码会替换上面那行代码,我们利用了 接下来我们开始定义 Y 轴,假如我们想画出 y = np.sin(x) 在这里, 又或者,我们想画出平方的图像,我们可以替换上面的代码为: y = x**2 Python 的四则运算符分别为 X 和 Y 的定义完成了,接下来,我们开始指令 matplotlib 来画出图像。 画出图像这步非常简单,只需要在代码的最后添加一行代码: plt.plot(x, y) 最后,点击工具栏上的绿色箭头,就可以运行这段代码。运行完毕之后,你就可以在右下角的窗口上看到你画出的图像。右键点击图像,即可保存。 进阶使用:了解 matplotlib 的强大自定义坐标轴现在我们来开始介绍 matplotlib 最强大的地方:自定义。为什么我们要使用 matplotlib 来画图?就是为了能够自定义图表中的一些元素。在上边的例子中,我们使用了 plt.xticks([-np.pi, 0, np.pi], ['-π', '0', 'π']) 对于这行代码,可能有一些人会看不明白,别着急,我们一一解释。 首先我们看第一个方括号内的数字 如果你不需要用文字表达而仅仅需要使用简单的数字,则不需要填写第二个方括号。这里我们用 Y 轴举例: plt.yticks([-1, -0.5, 0, 0.5, 1]) 这样,Y 轴就只会显示方括号内的五个数字。 添加标题添加标题非常简单,只需要加入一行代码,确保代码在 plt.title('在这里添加你的标题') 添加坐标轴文本添加坐标轴文本同样也非常简单,加入以下代码,确保代码在 plt.xlabel('X 坐标轴文本')plt.ylabel('Y 坐标轴文本') 画出多个函数如果需要画出多个函数,只需要再定义一个方程,并添加一行 import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-np.pi, np.pi, 256)y1 = np.sin(x)y2 = x**2plt.plot(x, y1)plt.plot(x, y2) 设置图像风格matplotlib 还有一个最强大的功能是自定义图像风格:想画出虚线、虚点线、点线,都没问题。我们可以将上面的 plt.plot(x, y1, 'b--')plt.plot(x, y2, 'r-.') 在这两行代码中,我们可以看到 上图中我们可以看到,正弦函数是蓝色,X 平方函数则是红色,这些颜色的配置归功于第三个参数中的第一个字符: matplotlib 中还有更多的线条风格和颜色,你可以在这个 官方文档 中查看。 设置图像格式以及大小可能大家已经注意到了:上面我们输出的函数图像,其实是非常不清晰的。那么现在我们来调整图像。确保以下代码位置在 plt.figure(figsize=(3, 5), dpi=300) 大家应该已经注意到了, 后记:为什么要用 matplotlib?看完这篇文章,可能会有读者问:「为什么我要费劲去写代码然后画出这些不起眼的图呢?」。其实说到底,这是「学习成本」的问题。对我个人来说,花这些时间学习 matplotlib,对我的未来来说是很有帮助的:对于即将上大学的我,必然会在未来方便我论文的撰写以及图表的绘制。 可能也有一些读者会问:为什么不用其他的软件?一方面是 matplotlib 自定义功能强。另一方面,虽然其他的软件拥有图形化的界面来简化画图的过程,但是我更喜欢用代码来解决问题,算是我个人的小癖好之一。 请在 这里 查看第一张图的源代码。 更多 matplotlib 的例子 |
|