所有需要用的包
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
二维图像
import numpy as np
import pylab as plt
x = np.arange(-100, 100, 1) #定义x的范围为-100至100,步长为1
y = x * x
plt.xlabel('x') #绘制X轴
plt.ylabel('y') #绘制Y轴
plt.title("y = x * x") #绘制图像标题
plt.plot(x, y)
plt.show()
三维图像
图像方程:z = xx+yy
绘制三维图像我们需要用到Axes3D库,调用ax.plot_surface进行绘制,其中plot_surface的参数如下图所示
参数 | 解释 |
---|---|
X,Y,Z | 坐标值参数 |
rstride | 数组行距(步长大小) |
cstride | 数组列距(步长大小) |
color | 所有曲面块颜色 |
cmap | 所有曲面块颜色映射 |
facecolors | 单独曲面块表面颜色 |
vmin | 映射最小值 |
vmax | 映射最大值 |
其中cmap的渐变色参数取值见:
https://matplotlib.org/2.0.2/examples/color/colormaps_reference.html
代码如下:
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import pyplot as plt
import random
fig = plt.figure()
ax = Axes3D(fig)
x=np.arange(-30,30,1)
y=np.arange(-30,30,1)
x, y = np.meshgrid(x, y)
z=x**2+y**2
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.plot_surface(x, y, z, cmap='rainbow')
plt.show()
散点图绘制
散点图绘制需要用到ax.scatter,具体代码如下
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib import pyplot as plt
import random
fig = plt.figure()
ax = Axes3D(fig)
x=np.arange(-30,30,1)
y=np.arange(-30,30,1)
x, y = np.meshgrid(x, y)
z=x**2+y**2
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.scatter(x, y, z,marker=".",color="blue")
plt.show()
更多随机散点图相关内容可见:https://blog.csdn.net/qq_43605229/article/details/115439364
心形图绘制
二维:
from matplotlib import pyplot as plt
import numpy as np
size = 2
x = np.linspace(-size, size, 400)
plt.plot(x, np.sqrt(1-(np.abs(x)-1)*(np.abs(x)-1)))
plt.plot(x, np.arccos(1-np.abs(x))-np.pi)
plt.show()
三维:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
def heart_3d(x,y,z):
return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3
def plot_implicit(fn, bbox=(-1.5, 1.5)):
xmin, xmax, ymin, ymax, zmin, zmax = bbox*3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
A = np.linspace(xmin, xmax, 100) # resolution of the contour
B = np.linspace(xmin, xmax, 40) # number of slices
A1, A2 = np.meshgrid(A, A) # grid on which the contour is plotted
for z in B: # plot contours in the XY plane
X, Y = A1, A2
Z = fn(X, Y, z)
cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))
for y in B: # plot contours in the XZ plane
X, Z = A1, A2
Y = fn(X, y, Z)
cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))
for x in B: # plot contours in the YZ plane
Y, Z = A1, A2
X = fn(x, Y, Z)
cset = ax.contour(X+x, Y, Z, [x], zdir='x',colors=('red',))
ax.set_zlim3d(zmin, zmax)
ax.set_xlim3d(xmin, xmax)
ax.set_ylim3d(ymin, ymax)
plt.show()
if __name__ == '__main__':
plot_implicit(heart_3d)