VPython一个Python的3D图形动画库被忽略的数据可视化功能
1 说明:
=====
1.1 VPython是一套简单易用的三维图形库,使用它可以快速创建三维场景和动画。
1.2 VPython 是python默认的3D模块,与PyOpenGL相比,容易上手,无需太多编程技巧。
1.3 主要讲解入门,对代码进行修改,代码为注释版,同时讲一讲ta被人忽略的强大的数据可视化作图功能。
1.4 支持中文,建议默认浏览器为谷歌浏览器。
2 准备:
=====
2.1 官网:https://www.vpython.org/ #网速慢 https://vpython.org/ #网速慢 https://www.glowscript.org/docs/VPythonDocs/index.html https://pypi.org/project/vpython/ https://github.com/vpython/glowscript #GlowScript 3.0 VPython,是最新版的VPython,源代码来自这里,进行修改
2.2 环境:
华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。
2.3 安装:pip install vpython #本机安装,采用清华国内源,超速 sudo pip3.8 install -i https://mirrors.aliyun.com/pypi/simple vpython
3 Helloworld:
==========
3.1 代码:from vpython import * #t = text(text="Faces forward", pos=vec(-4,0,0),color=color.cyan, billboard=True, emissive=True) #屏幕默认大小和背景颜色 #注意vec=vector text(text="Hello World", pos=vec(-4,0,0),color=color.cyan, billboard=True, emissive=True)
3.2 操作和效果图:
4 box和scene:
===========
4.1 代码:from vpython import * #注意不管scene.caption的位置放在哪里,都是在scene==canvas==画布的下面显示文字 scene.caption = """ 3D text can be "billboard" text -- always facing you. 你好 """ #屏幕=scene大小==canvas=画布==差不多 scene.width = 500 scene.height = 500 #背景颜色,默认为黑色 #scene.background = color.gray(0.9) scene.background = color.red #注意没有box(),下面不显示文字,也就是scene不显示在浏览器中 #pos==position==位置,初始位置0,0,0==屏幕中心 #size==边长==长=宽=高==1 box(pos=vec(0,0,0), opacity=1, size=vec(1,1,1), texture=textures.flower) #scene.caption = """你好"""
4.2 效果图:
5 Bounce:
=======
5.1 代码:from vpython import * scene.caption = """ 1 滑动鼠标滑轮进行zoom放大缩小 2 点击右键进行旋转 """ side = 4.0 thk = 0.3 s2 = 2*side - thk s3 = 2*side + thk wallR = box (pos=vector( side, 0, 0), size=vector(thk, s2, s3), color = color.red) wallL = box (pos=vector(-side, 0, 0), size=vector(thk, s2, s3), color = color.red) wallB = box (pos=vector(0, -side, 0), size=vector(s3, thk, s3), color = color.blue) wallT = box (pos=vector(0, side, 0), size=vector(s3, thk, s3), color = color.blue) wallBK = box(pos=vector(0, 0, -side), size=vector(s2, s2, thk), color = color.gray(0.7)) ball = sphere (color = color.green, radius = 0.4, make_trail=True, retain=200) ball.mass = 1.0 ball.p = vector (-0.15, -0.23, +0.27) side = side - thk*0.5 - ball.radius dt = 0.3 while True: rate(200) ball.pos = ball.pos + (ball.p/ball.mass)*dt if not (side > ball.pos.x > -side): ball.p.x = -ball.p.x if not (side > ball.pos.y > -side): ball.p.y = -ball.p.y if not (side > ball.pos.z > -side): ball.p.z = -ball.p.z
5.2 效果图:
===讲解被忽略的数据可视化功能===
6 gdots:
======
6.1 代码:#散点图==gdots==graph-dots==Scatter from vpython import * #oscillation = graph(title=s, xtitle="time", ytitle="value", fast=False, width=800) #图表标题,支持中文,x和y坐标轴名称,图表宽800 graph(title="图表", xtitle="time", ytitle="value", fast=False, width=800) #等同上面 data=[[1,5],[4,2],[6,1],[2,5],[3,4]] funct3 = gdots(color=color.red, size=6, label="dots") funct3.plot(data)
6.2 图:其实内置plotly,简单且强大。
7 gvbars:
=======
7.1 代码:""" #1组gvbars==graph-v-bars==垂直柱状图 from vpython import * #图表标题,支持中文,x和y坐标轴名称,图表宽800 graph(title="图表", xtitle="time", ytitle="value", fast=False, width=800) data=[[1,5],[2,2],[3,3],[4,4],[5,6]] funct3 = gvbars(delta=0.4, color=color.green, label="bars") funct3.plot(data) """ #2组gvbars==graph-v-bars==垂直柱状图 #备注:gvbars==ghbars≠gbars from vpython import * #图表标题,支持中文,x和y坐标轴名称,图表宽800 graph(title="图表", xtitle="time", ytitle="value", fast=False, width=800) #数据1 data1=[[1,5],[2,2],[3,3],[4,4],[5,6]] funct1 = gvbars(delta=0.4, color=color.green, label="bars-1") funct1.plot(data1) #数据2 data2=[[1,3],[2,5],[3,4],[4,2],[5,2]] funct2 = gvbars(delta=0.4, color=color.red, label="bars-2") funct2.plot(data2)
7.2 图:
8 gcurve:
=======
8.1 代码:#2组gcurve==graph-curve==折线图 #也是Scatter兼顾 from vpython import * #图表标题,支持中文,x和y坐标轴名称,图表宽800 graph(title="图表", xtitle="time", ytitle="value", fast=False, width=800) #数据1 data1=[[1,5],[2,2],[3,3],[4,4],[5,6]] funct1 = gcurve(color=color.blue, width=4, markers=True, marker_color=color.black, label="curve-1") funct1.plot(data1) #数据2 data2=[[1,3],[2,5],[3,4],[4,2],[5,2]] funct2 = gcurve(color=color.green, width=4, markers=True, marker_color=color.red, label="curve-2") funct2.plot(data2)
8.2 效果图:
===可用图形简单,但很方便===
大神,可以适当修改,位置在:
比如本机root下的位置
/usr/local/python3.8/lib/python3.8/site-packages/vpython/vpython.py
第2071行开始,适当增加即可。
放一个官网源代码的图,代码就省略了。
===好强大呀,而且很简单,国内基本没有人介绍===
===自己整理并分享出来===
喜欢的点赞、评论、关注、转发和收藏。
那些年,一个农村小木匠的婚姻,背后有多少故事二哥卫东上次相亲,因为房子的事女方没有同意,差不多一个月没有出过家门。看到二哥天天都这样,母亲非常心痛,要不,跟你大舅去学木匠吧!大舅是我们家乡方圆几十里师傅级别的木匠,做的木工活
为什么这辈子一定要至少去一次西藏?把格桑花播种在开心的心里除夕的拉萨喜迎瑞雪,这也成了叫开心起床最好用的闹钟。这天早上也是她起床穿衣出门最迅速的一次。刚满六周岁的开心,已经在福建生活了近5年,对雪的印象已经停滞淡化在了2岁的记忆里。还没有
每个活过的人,都是后人的路上那丝光亮。感恩我们的先祖文蘑菇我家清明祭祖向来不在清明这一日,多年来一直在春分后的某个周末合族团聚,杀鸡宰羊,用成串的长钱和小山般的烧纸把规模不大的祖坟染成黄表纸的颜色。清明祭祖,在一般人映象里,似乎应是
婆婆的茶饭头儿作者洛阳丁丽(非花非雾)茶饭头儿是豫西乡村对女人厨艺的别称。婆婆的茶饭头儿一般般,却把四女二男六个孩子养大成人了。这是婆婆的骄傲,也是婆婆安度晚年的依靠。2021年春节,因为新冠疫
今天是正月二十一,我想说一声孔广惠,您好文孔昭凤牛年春节假期,电影你好,李焕英异常火爆。你好,李焕英电影讲述了演员贾晓玲在经历子欲养而亲不待的悲痛后,穿越时空回到过去,触摸年轻的父母和他们的梦想的故事。今天,在爸爸的忌日
你给妈妈买过棒棒糖吗?不买一次,你怎么知道妈妈有多开心文杨旭萍日子就像手里的棒棒糖裹着一层纸闻不到它的香看不见它的真心看不到它的俊俏模样日子就是棒棒糖打开了它的衣裹闻到了它的香尝一尝甜了心甜了情甜了脚下甜了远方日子总有棒棒糖心想了望一
史铁生母亲的苦难与伟大有过我的车辙的地方都有过母亲的脚印作者史铁生节选自我与地坛人民文学出版社2008现在我才想到,当年我总是独自跑到地坛去,曾经给母亲出了一个怎样的难题。她不是那种光会疼爱儿子而不懂得
这些刻骨铭心的情话!您说过几句?您听过几句?1hr一只羊爱上了一头驴,驴说你能允许我吼你,踢你,就证明你爱我。于是羊就迁就忍耐,接受驴子连踢带吼。一年,二年十年,终于羊离开了驴。有人问羊10年都坚守了,为什么不坚持一辈子呢?
太阳的雅鲁藏布文甄小龙3月的拉萨已经看见柳芽的嫩黄,沿着拉萨河一路走去,转过弯来,朝着山南的方向进发,领略到的都是雅鲁藏布江的波澜壮阔。在进藏之前,我就对藏族的歌曲情有独钟,优美的旋律和着迷人的
写给我的花季女孩。愿你成为最好的女儿,我努力成为最好的妈妈文蘑菇我的女孩,十五岁正值花季,你将迎来你最美好的年华。虽然你额头上长满了青春痘,清澈的眼神也常常被黑框眼镜遮挡,你甚至还戴着牙齿矫正器,满嘴钢牙,可那又怎样?你即将绽放,在你最美
我愿用一切,换你岁月长流文陈莉家中书柜里藏着一本相册,我已经好久没有翻开过了,里面存放着一张父亲的照片。因为我亲眼目睹了父亲离世的那场意外,也因为这场事故成了我年少时的一道疤,我从不轻易触碰父亲的照片,就