136 lines
4.5 KiB
Python
136 lines
4.5 KiB
Python
"""
|
||
任务描述
|
||
相关知识
|
||
绘制三维曲线的方法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()
|
||
|