Python第三方扩展库Matplotlib
Matplotlib 是第三方库,不是Python安装程序自带的库,需要额外安装,它是Python的一个综合性的绘图库,提供了大量的绘图函数用于创建静态、动态、交互式的图形和数据可视化,可以帮助用户创建各种类型的图形,包括折线图、散点图、柱状图、饼图等。
Matplotlib 官网:https://matplotlib.org/
Matplotlib中文网 https://www.matplotlib.net
在Windows平台上安装matplotlib,可在cmd命令行中,输入如下命令
pip3 install matplotlib
回车,默认情况使用国外线路较慢,我们可以使用国内的镜像网站:
豆瓣:https://pypi.doubanio.com/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple
例如使用清华的镜像
pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
电脑上安装了多个Python版本,你可以为特定版本的Python安装模块(库、包)。例如我的电脑中安装了多个Python版本,要在Python 3.10版本中安装,并使用清华的镜像,cmd命令行中,输入如下命令
py -3.10 -m pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
回车即可。
特别提示一种情况,使用matplotlib安装成功,但使用时提示:…… ImportError: DLL load failed while importing _cext: 拒绝访问。出现这个错误有可能遇到了权限问题。你可以尝试以管理员身份启动你的Python。
Matplotlib库的安装不需要预先安装其他依赖库。当你运行该命令时,pip会自动处理Matplotlib所需的所有依赖项,并将其安装到你的Python环境中。
Matplotlib 提供了一个称为 pyplot 的模块,它是一个类似于 MATLAB 的接口。pyplot 提供了一种简便的方式来创建图表,并且包含了大量的函数来控制线条风格、属性、轴、标签等。
下面是使用 pyplot 接口的一些基本概念和步骤:
1. 导入 pyplot
通常,我们会使用以下方式导入 pyplot:
import matplotlib.pyplot as plt
2. 准备数据
在绘图之前,你需要准备好数据。这些数据可以是列表、NumPy 数组等形式。
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
3. 绘制图形
使用 plot 函数绘制基本的线图。你也可以使用如 scatter、bar、hist 等函数来绘制散点图、条形图、直方图等。
plt.plot(x, y)
4. 自定义图形
你可以添加标题、轴标签、图例、网格等,以及调整其他的样式设置。
plt.title('Example of a Simple Line Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.grid(True)
5. 显示或保存图形
使用 show 函数在屏幕上显示图形,或者使用 savefig 函数将图形保存到文件。
plt.show() # 显示图形
# 或者
plt.savefig('plot.png') # 保存图形到文件
6. 清理
为了避免绘图命令之间的冲突,可以在绘制完一个图形后使用 clf 或 close 来清理。
plt.clf() # 清除当前图形的所有轴,但是窗口打开着,这样它可以被再次使用。
plt.close() # 关闭窗口,如果你指定了数字参数,它会关闭特定的窗口。
下面是示例代码:
import matplotlib.pyplot as plt
# 准备数据
x = [1, 2, 3, 4]
y = [10, 20, 25, 30]
# 绘制图形
plt.plot(x, y, label='Linear Growth')
# 自定义图形
plt.title('Simple Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.legend()
plt.grid(True)
# 显示图形
plt.show()
运行效果:
在这个例子中,使用 plt.plot() 函数创建了一个折线图,plt.title(), plt.xlabel(), 和 plt.ylabel() 函数分别用来添加图表的标题和轴标签。label 参数用于为线条添加图例。使用 legend 函数可以显示图例。通过 grid 函数可以添加网格线。最后,plt.show() 函数用来显示图形。
生成曼德博集合(Mandelbrot Set)
曼德博集合(Mandelbrot Set)是一种在复平面上组成分形的点的集合,以数学家本华·曼德博(Benoit B. Mandelbrot)的名字命名。这个集合的奇妙之处在于将曼德博集合无限放大都能够有精妙的细节在内,而这瑰丽的图案仅仅由一个简单的公式生成。因此有人认为曼德博集合是人类有史以来做出的最奇异、最瑰丽的几何图形”,曾被称为上帝的指纹”。
曼德博集合与朱利亚集合(Julia Set)有些相似的地方,例如使用相同的复二次多项式来进行迭代。但是,曼德博集合的关注点在于复平面的全局结构,而朱利亚集合则关注局域结构。曼德博集合的生成过程涉及复二次多项式的迭代,其基本形式为:
z = c
其中 z 和 c 都是复数参数。从 z 开始对 c 进行迭代:
c_n+1 = (z_n^2 + c_n)^(1/2)
每次迭代的值依序如以下序列所示:
c_0, c_1, c_2, ...
不同的参数 c 可能使序列的绝对值逐渐发散到无限大,也可能收敛在有限的区域内。曼德博集合就是所有可能收敛区域组成的集合。
曼德博集合在数学、物理学、金融学等领域具有广泛的应用,同时也吸引了无数艺术家、摄影师和设计师的关注。它以一种独特的方式展示了数学之美,并为人们提供了无穷的灵感来源。
源码如下:
import numpy as np
import matplotlib.pyplot as plt
# 定义绘制Mandelbrot图形的函数
def mandelbrot(c, max_iter):
z = c
for n in range(max_iter):
if abs(z) > 2:
return n
z = z*z + c
return max_iter
# 设置绘图参数
x_min, x_max = -2.5, 1.5
y_min, y_max = -2, 2
width, height = 1000, 1000
max_iter = 100
# 生成坐标网格
x = np.linspace(x_min, x_max, width)
y = np.linspace(y_min, y_max, height)
X, Y = np.meshgrid(x, y)
Z = X + 1j * Y
# 计算Mandelbrot图形
M = np.zeros((height, width))
for i in range(height):
for j in range(width):
M[i, j] = mandelbrot(Z[i, j], max_iter)
# 绘制Mandelbrot图形
plt.figure(figsize=(10, 10))
plt.imshow(M, extent=(x_min, x_max, y_min, y_max), cmap='hot', interpolation='bilinear')
plt.colorbar()
plt.show()
运行效果: