This commit is contained in:
pluv committed 2026-10-09 14:11:54 +08:00
1 parent ae0d509dbd
commit 029237b364
12 files changed
+1055 -116

No files matched your search

+135
View File
@@ -0,0 +1,135 @@
"""
任务描述
相关知识
绘制三维曲线的方法plot()
绘制三维曲面的方法plot_surface()
绘制三维散点图的方法scatter(x,y,z,color)
生成随机数的方法numpy库中的random.randint(a,b,c)
一维数组元素切片方法array[start:end:step]
编程要求
测试说明
任务描述
本关任务:绘制三维曲线图和三维散点图。
相关知识
为了完成本关任务,请认真阅读以下相关知识。
mpl_toolkits.mplot3d是Matplotlib里面专门用来画三维图的工具包,导入该库,即可绘制三维图形。
如果要绘制三维图形,首先需要使用下面的语句导入相应的对象:
import mpl_toolkits.mplot3d
然后使用下面的方法创建三维子图:
ax=plt.subplot(projection='3d')
接下来就可以使用ax的plot()方法绘制三维曲线、plot_surface()方法绘制三维曲面、scatter()方法绘制三维散点图。
绘制三维曲线的方法plot()
代码示例如下:
导入库
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
绘制三维坐标系
ax=plt.subplot(111,projection='3d')
生成绘图数据
x=np.linspace(0,2*np.pi,300)
y=np.linspace(0,3*np.pi,300)
z=50*np.sin(x+y)
绘制三维曲线
ax.plot(x,y,z)
plt.show()
上述代码呈现下面的效果:
绘制三维曲面的方法plot_surface()
plot_surface(X, Y, Z, rstride,cstride,color)
参数说明:
X,Y,Z:指定三个坐标轴的数据。
rstride,cstride:分别控制x和y两个方向的步长,这决定了曲面上每个面片的大小。
color:用来指定面片的颜色
绘制三维散点图的方法scatter(x,y,z,color)
参数说明:
x,y,z: 指定散点符号的x、y、z坐标
color:用来指定散点的颜色
生成随机数的方法numpy库中的random.randint(a,b,c)
参数说明:
a:生成随机数的下限。
b:生成随机数的上限。
c:随机数的个数。
一维数组元素切片方法array[start:end:step]
功能:获取一维数组array中从start到end(不包括end)以step为步长所对应元素组成的数组。
step可省略,默认为1。
代码示例如下:
>>array = np.arange(10) #生成0-9,步长为1的数组
>>print(array)
>>[0 1 2 3 4 5 6 7 8 9] #数组元素
>> print(array[3:5]) #获取索引从3到5的数组元素组成的数组
>>[3 4]
编程要求
在2行2列的绘图区域中绘制三维曲线、曲面和散点点图,要求如下:
1.在第一个绘图区域绘制一条给定数据的三维曲线;
2.在第二个绘图区域绘制一条z=50*sin(x+y)三维曲面,x,y两个方向的步长分别为2,3。
3.在第三个绘图区域绘制三维散点图,x,y,z三个坐标轴的数值分别0-50之间的30个随机数。30个点中,前10个点红色,中间10个点蓝色,最后10个点黄色。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
预期输出:
你的答案与正确答案一致
开始你的任务吧,祝你成功!
"""
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
def level4():
#绘制三维曲线
plt.figure(figsize=(10, 10))
#**********begin**********#
#绘制三维坐标系ax1在二行二列区域的第1个区域中
ax1=plt.subplot(221,projection='3d')
#生成绘图数据
x1=np.linspace(0,2*np.pi,300)
y1=np.linspace(0,3*np.pi,300)
z1=50*np.sin(x1+y1)
#(1)利用plot()绘制曲线(x1,y1,z1)到ax1
ax1.plot(x1,y1,z1)
#(2)绘制三维坐标系ax2在二行二列区域的第2个区域中
ax2=plt.subplot(222,projection='3d')
#生成绘图数据
x2,y2=np.mgrid[-2:2:20j,-2:2:20j]
z2=50*np.sin(x2+y2)
#(3)利用plot_surface(x2,y2,z2)绘制曲面到ax2,x方向(rstride)步长为2,y方向(cstride)步长为3
ax2.plot_surface(x2,y2,z2,rstride=2,cstride=3)
#(4)绘制三维坐标系ax3在二行二列区域的第3个区域中
ax3=plt.subplot(223,projection='3d')
#生成绘图数据
x3=np.random.randint(0,50,30)
y3=np.random.randint(0,50,30)
z3=np.random.randint(0,50,30)
#(5)(x3,y3,z3)按区域绘制不同颜色散点图:[0:10]红色,[10:20]蓝色,[20:30]黄色
ax3.scatter(x3[0:10],y3[0:10],z3[0:10],color='r')
ax3.scatter(x3[10:20],y3[10:20],z3[10:20],color='b')
ax3.scatter(x3[20:30],y3[20:30],z3[20:30],color='y')
#**********end**********#
#将绘制的图形保存为指定路径下的图片
plt.savefig("task4/image1/t4.png")
#显示创建的绘图对象
plt.show()