Files
educoder-ans/3.4.5.py
T
2026-10-09 14:11:54 +08:00

136 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
任务描述
相关知识
绘制三维曲线的方法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()