python三维建模可视化与交互,python三维建模可视化

大家好,小编来为大家解答以下问题,python三维建模可视化与交互,python三维建模可视化,现在让我们一起来看看吧!

1.利用Python绘制三维图

目标: 绘制图像 z^2 = x^2 + y^2 + x/3 + y/3


1.第一步我们先导入画图所需要的包:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D # 用于绘制3D图案

2.画曲面的第一步是就是要创建一个二维平面的网格,我们先创建这个二维平面的x轴和y轴,范围在-1到1之间分为100份

x = np.linspace(-1,1,100)
y = np.linspace(-1,1,100)

        再调用numpy中的meshgrid函数,进行网格化操作

x_,y_ = np.meshgrid(x,y,indexing='ij') 

3.绘制图形:

plt.figure():自定义图像,plt.add_subplot():添加子图(下面完整代码中的111的含义是创建一个一行一列的子图表格,最后一个1表示第一个子图),plt.plot_surface():绘制曲面,plt.colorbar():添加颜色棒

显示的函数为:

z_ = x_**2 + y_**2 + x_ / 3 + y_ / 3

4.完整代码:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D #绘制3D图案

x = np.linspace(-1,1,100)
y = np.linspace(-1,1,100)
x_, y_ = np.meshgrid(x,y,indexing='ij')
z_ = x_**2 + y_**2 + x_ / 3 + y_ / 3  # 画图所要表现出来的主函数
fig = plt.figure(figsize=(10, 10), facecolor='white') #创建图片
sub = fig.add_subplot(111, projection='3d')# 添加子图,
surf = sub.plot_surface(x_, y_, z_, cmap=plt.cm.brg) #绘制曲面,cmap=plt.cm.brg并设置颜色cmap
cb = fig.colorbar(surf, shrink=0.8, aspect=15) #设置颜色棒

sub.set_xlabel(r"x axis")
sub.set_ylabel(r"y axis")
sub.set_zlabel(r"z axis")
plt.show()

运行结果如下:

2.外例:

import numpy as np
import matplotlib.pyplot as plt
fig,ax = plt.subplots()
#配置中文显示
plt.rcParams['font.family'] = ['SimHei']      #用来显示中文标签
plt.rcParams['axes.unicode_minus'] = False   #用来正常显示符号
def f(t):
    return np.cos(2*np.pi*t)
x1 = np.arange(0.0,4.0,0.5)  # 画出定点图
x2 = np.arange(0.0,4.0,0.01)
plt.figure(1)
plt.subplot(1,2,1)
plt.plot(x1,f(x1),'bo',x2,f(x2),'k')
plt.title('子图1')
plt.subplot(1,2,2)
plt.plot(x2,f(x2),'r--')
plt.title('子图2')
plt.show()

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm#matplotlib内置的颜色地图
from mpl_toolkits.mplot3d import Axes3D#引入3d绘图模块
X = np.arange(-8, 8, 0.25)
Y = np.arange(-8, 8, 0.25)
X, Y = np.meshgrid(X, Y)#生成网格点矩阵,就是对X,Y进行网格化
R = np.sqrt(X**2 + Y**2 + X + Y)#X**2代表X的二次方
Z = np.sin(R)
fig = plt.figure()#Figure(640x480)   生成画布
ax = Axes3D(fig)#和上一步一起构建一个3d画布
ax.plot_surface(X, Y, Z, rstride=1#行跨(x)为1
                , cstride=1        #列跨(y)为1
                , cmap=cm.viridis  #设置颜色
                )#构造3D图像
ax.contourf(X,Y,Z,#传入数据
            zdir='z'#设置为z轴为等高线的不变轴
            ,offset=-1#映射位置在z=-1处
            ,cmap=plt.get_cmap('rainbow')#设置颜色为彩虹色
            )#绘制图像的映射,就是等高线图。
plt.xlabel('x_axis')
plt.ylabel('y_axis')
plt.show()

 

import matplotlib.pyplot as plt#引入matplotlib的pyplot模块
import numpy as np
a=np.arange(0.0,5.0,0.01)#构造一个0起始,5结束,0.01为间隔的numpy数组
b=5*np.cos(a*np.pi*2)#其中的np.pi是圆周率
plt.plot(a,b,'r-',label='first')#将a作为x轴,b作为y轴,ro-中的r代表红色,0代表实心点标识,-代表实线,构造一条名为first的曲线70个python练手项目。
#plt.xlabel('x_axis')
plt.xlabel('时间',fontproperties='SimHei',fontsize=20)#如果名字中有中文的话一定要用fontproperties='SimHei属性,否则会报错
#plt.ylabel('y_axis')
plt.title('正弦波',fontproperties='SimHei',fontsize=20)#设置标题
plt.xlim((0,5))
plt.ylim((-5,5))
plt.legend(loc='lower right')#注释的位置
plt.grid(True)#添加网格,flase就是不添加
plt.show()#如果先show,之后保存的就是一张空白的图

 

3.绘图的填充 

3.1调用函数fill_between()实现曲线下面部分的填充

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x)
fig,ax = plt.subplots()
plt.plot(x,y)
plt.fill_between(x,0,y,facecolor = 'green',alpha = 0.3)
# plt.fill_between(x[15:300],0,0.4,facecolor = 'green',alpha = 0.3) 
# 调整参数可在部分区间内填充
plt.show()

3.2 两条曲线之间的区域填充 

import numpy as np
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,500)
y1 = np.sin(3*np.pi*x)*np.exp(-4*x) + x
y2 = y1 + 0.2
plt.plot(x,y1,'b')
plt.plot(x,y2,'r')
plt.fill_between(x,y1,y2,facecolor = 'green',alpha = 0.5)
plt.show()

 3.3 直接使用fill进行绘图的填充

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1,500)
y = np.sin(3*np.pi*x)*np.exp(-4*x) + 2*x
fig,ax = plt.subplots()
ax.fill(x,y)
plt.show()

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值