Python TVTK 标量数据可视化与矢量数据可视化,pythontvtk,Python数据可视
Python TVTK 标量数据可视化与矢量数据可视化,pythontvtk,Python数据可视
Python数据可视化分为
标量可视化,矢量可视化,轮廓线可视化
标量又称无向量,只有大小没有方向,运算遵循代数运算法则比如质量,密度,温度,体积,时间
矢量又称向量,它是由大小,方向共同确定的量,运算时遵循几何运算法则,如速度,加速度,力,磁场强度,电场强度等
#实例1标量数据可视化
‘‘‘
使用等值面对标量场进行可视化(体绘制[三维空间数据场]常用手段)
等值面:标量场中标量值相等的曲面,类似地图中的等高线
tvtk.ContourFilter等值面过滤器,用来获得等值面,
它是由vtkObject<--vtkAlogorithm<--vtkPolyDataAlgorithm继承得到的一个类
两个方法
generate_values()设定n条等值线的值,一般用于重新绘制等值线
set_value()设定一条等值线的值,一般用于覆盖某条等值线或者新增加一条等值线
from tvtk.api import tvtkfrom tvtkfunc import ivtk_scene,event_loop#读入plot3D数据plot3d=tvtk.MultiBlockPLOT3DReader( xyz_file_name="combxyz.bin",#网格文件 q_file_name="combq.bin",#空气动力学结果文件 scalar_function_number=100,#设置标量数据数量 vector_function_number=200#设置矢量数据数量 )plot3d.update()grid = plot3d.output.get_block(0)#获取读入的数据集con = tvtk.ContourFilter()#创建等值面对象con.set_input_data(grid)#将网格与其进行绑定#范围由数组Scalars.range决定,颜色也由scalars决定con.generate_values(10,grid.point_data.scalars.range)#创建10个等值面#默认映射表:最小值为红色,最大值为蓝色#对映射器进行构造m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=con.output_port)#对标量行为属性进行赋值,设置成新增加的数组的取值范围a=tvtk.Actor(mapper=m)#由于这十个等值面会相互嵌套,为观察等值面内部结构,修改Actor对象透明度为0.5a.property.opacity=0.5#绘制交互窗口win=ivtk_scene(a)win.scene.isometric_view()event_loop()
generate_values是创建等值面的函数,它可以同时设定n条等值线的值。
尝试更改generate_values之中的n值之后颜色改变。可以使用set_value方法设置每个等值面的值,它的第一个参数指定了第几个等值面,第二个参数指定了等值面的值。
运行效果是很漂亮的,通过设置不同的透明度会出现不同的效果。
矢量数据可视化
用箭头表示矢量数据场的数据,
箭头的大小可以表示标量信息,
箭头的方向可以表示矢量数据的方向
为了在矢量数据的网格处放置箭头符号,使用tvtk库提供的Glyph3D方法
可以产生放缩,着色和具有方向的符号
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkGly3D
可以采用降维的方法降低数据密度
可以使用tvtk.MaskPoints()对数据进行降采样
vtkObject<--vtkAlgorithm<--vtkPolyDataAlgorithm<--vtkMaskPoints
from tvtk.api import tvtkfrom tvtkfunc import ivtk_scene,event_loop#读入plot3D数据plot3d=tvtk.MultiBlockPLOT3DReader( xyz_file_name="combxyz.bin",#网格文件 q_file_name="combq.bin",#空气动力学结果文件 scalar_function_number=100,#设置标量数据数量 vector_function_number=200#设置矢量数据数量 )plot3d.update()grid = plot3d.output.get_block(0)#获取读入的数据集(StructureGrid)#对数据集中的数据进行随机选取,每50个点选择一个点mask = tvtk.MaskPoints(random_mode = True,on_ratio = 50)#为数据进行了降采样#每50个点选择一个点,为数据进行了降采样。为了观察效果可以在shell中进行输出降采样的效果mask.set_input_data(grid)#将grid与musk相连#创建表示箭头的PolyData数据集glyph_source = tvtk.ArrowSource()#ArrowSource可以改成ConeSource()出来的箭头变成圆锥,scale_factor=2设置防缩系数#在Mask采样后的PolyData数据集每个点上放置一个箭头#箭头的方向、长度和颜色由于点对应的矢量和标量数据决定#在本例中箭头的方向表示速度的方向,大小和颜色表示密度#箭头越大,该点标量值越大。箭头的颜色表表示标量值的大小#红色对应的标量值越小,蓝色对应的标量值越大glyph=tvtk.Glyph3D(input_connection=mask.output_port,scale_factor=4)#4表示符号的共同放缩系数#tvtk的可视化技术,它输入数据的每个点都被拷贝一个符号。#符号本身是通过Glyph3D的filter的第二个输入函数来接收vtkPolyData的类型数据#然后通过ArrowSource在每个点上放置一个箭头glyph.set_source_connection(glyph_source.output_port)m=tvtk.PolyDataMapper(scalar_range=grid.point_data.scalars.range,input_connection=glyph.output_port)a=tvtk.Actor(mapper=m)#交互窗口绘制win=ivtk_scene(a)win.scene.isometric_view()event_loop()
运行效果如下,可以说是仿真版的西北风本风了哇咔咔咔
按照注释的方法换成圆锥是什么效果呢?
哈哈哈小圆锥萌萌哒~如果我再皮一下换成立方体呢?
竟然莫名地好看。。
降采样技术是挺重要的,要不可能根本出不来
可以使用tvtk.MaskPoints()对数据进行降采样。可以通过Shell查看降采样之前的数据个数和降采样之后的数据个数
相差还是多的
Python TVTK 标量数据可视化与矢量数据可视化
相关内容
- 初识Python,,一、编程语言简介编程
- python之使用request模块发送post和get请求,pythonrequest,im
- 潘森(python)数据类型,潘森python,一、数字型(numb
- Python 随笔之Redis,python随笔redis,Python学习记录
- python re模块,pythonre,python 中的r
- 如何离线安装python的whl库,离线pythonwhl,对于使用公司内
- Pycharm集成Python编程环境IDE,pycharmpython, Python(英
- Python学习笔记__12.4章 struct,python__12.4,# 这是学习廖雪峰
- Python下APScheduler的简单使用,pythonapscheduler,今天准备实
- Python 项目实践三(Web应用程序)第二篇,pythonweb,接着
评论关闭