【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

所有需要用的包

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) 

在这里插入图片描述

相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页