文章目录
1.等高线图
要想画出一个等高线图,主要分为以下三个步骤
- 铺盖出平面
- 在平面上赋值
- 在分界处画出等高线
- 为等高线添加标签
1.1 meshgrid
主要用于铺盖出一个二维平面
- 其参数主要传进去两个linspace函数生成的向量
- 如果传进去的两个向量的维度分别为m维度和n维度,则可以生成一个m*n的一个网格平面
- 在这m*n个网格数据中附上对应的数值,则相当于在三维的的空间中做出了图像,第三个维度在二维平面中表现为颜色的深浅
#定义网格
X,Y = np.meshgrid(x,y)
1.2 plt.contourf
f对应的意思是fill,这个函数的功能主要可以将二维的图片依据传进去的参数Z涂上相应的颜色
- 参数1和2传进去刚才生成的二维网格的平面坐标
- 参数3传进去网格对应生成的Z轴数据
- 参数4输入一个整数,表示图片中将被分成的色块的数量
- alpha:透明度
- cmap:图片的整体色系
#把颜色放上去
# 数字8 表示将等高线分成多少部分,如果这里填8的话就是10个部分
plt.contourf(X, Y, f(X,Y), 8, alpha = 0.75, cmap=plt.cm.hot)
1.3 plt.contour
相比于上面一个函数,少了个f,这个函数主要用于在不同的色块交界的地方绘制等高线
- 其传进去的前几个参数的含义与上一部分的函数大致相同
- colors:线的颜色
- linewidths:线宽
#画等高线的线
#注意线的宽度是 linewidths,后面有s
C = plt.contour(X,Y,f(X,Y),8,colors = 'black',linewidths=.5)
1.4 plt.clabe
为等高线加上标注
- 第一个参数传进去刚才等高线绘制函数返回的句柄
- inline:等高线是否穿过字体
- fontsize:文字大小
#添加线对应的标签
#改为False的话就会使得线穿过数字本身
plt.clabel(C,inline=True,fontsize = 10)
1.5 测试代码
# -*- coding:utf-8 -8-
"""
Author: Leung
Date: 2021--08--23
"""
import matplotlib.pyplot as plt
import numpy as np
def f(x, y):
# the height function
return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
#定义网格
X,Y = np.meshgrid(x,y)
#把颜色放上去
# 数字8 表示将等高线分成多少部分,如果这里填8的话就是10个部分
plt.contourf(X, Y, f(X,Y), 8, alpha = 0.75, cmap=plt.cm.hot)
#画等高线的线
#注意线的宽度是 linewidths,后面有s
C = plt.contour(X,Y,f(X,Y),8,colors = 'black',linewidths=.5)
#添加线对应的标签
#改为False的话就会使得线穿过数字本身
plt.clabel(C,inline=True,fontsize = 10)
plt.xticks(())
plt.yticks(())
plt.show()
1.6 最终效果
2. 3D图形的绘制
3D图像与等高线的绘制方法绘制,都是几大步骤
- 指定网格
- 在网格上写下对应的数值
- 绘制图像 ,主要使用plot_surface函数
不过需要注意的是,我们在绘制3D图像的时候需要在前面加上加粗样式一个3D图像的定义句柄
#加上一个3D的坐标轴
ax = Axes3D(fig)
这个功能类似于我们画2D图像时候定义的figure
2.1 plot_surface
与前面等高线的绘制函数类似
- 前三参数传进去X,Y,Z
- rstride=1 表示行跨度 与列跨度,跨度越大,其小正方形面积越大
- cmap=plt.get_cmap(‘rainbow’):设置图形的色系为彩虹色
# rstride=1 表示行跨度 与列跨度
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
2.2 测试代码
# -*- coding:utf-8 -8-
"""
Author: Leung
Date: 2021--08--23
"""
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
#加上一个3D的坐标轴
ax = Axes3D(fig)
#生成向量
X = np.arange(-4,4,0.25)
Y = np.arange(-4,4,0.25)
X,Y = np.meshgrid(X,Y)
R = np.sqrt(X**2+Y**2)
#高度数值
Z = np.sin(R)
# rstride=1 表示行跨度 与列跨度
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
# 从z轴压下去,投影到xoy平面上
ax.contourf(X,Y,Z,zdir='z',offset=-1,cmap='rainbow')
ax.set_xlim(-4,4)
plt.show()
2.3 测试结果
写在最后
本文章为【莫烦Python】Matplotlib Python 画图教程课程对应的一些课堂笔记,并参考了Matplotlib的开发者文档,仅为各位同志学习参考之用
各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知