背景
需利用python进行3D可视化处理,用于分析python得到的数据的正确性。
知识学习
python高阶3D绘图---pyvista模块,mayavi模块,pyopengl模块,MoviePy模块基础使用-CSDN博客
python用于3D绘图的模块比较多,pyvista模块,mayavi模块,pyopengl模块,MoviePy模块matplotlib库。建议直接看官方教程比较快。工具很多,具体使用哪一种,根据各模块的特点选用。
如下官网链接
Mayavi: 3D scientific data visualization and plotting in Python — mayavi 4.8.3.dev0 文档
Matplotlib — Visualization with Python (推荐看英文官网)
Examples — PyVista 0.43.1 documentation
PyOpenGL -- The Python OpenGL Binding (sourceforge.net)
应用
代码如下:
这个项目是因为,已经将得到的数据存在xlsx中,所以增加了读数据的操作,直接调用python的数据也一样,主要用到如下代码用于3d 散点图的显示
# 显示图形
fig = plt.figure(figsize=(10, 8)) # 设置图形大小
ax = fig.add_subplot(111, projection='3d')
ax.scatter(Oab_rows_x, Oab_rows_y, Oab_rows_z, label='O set', s=1, alpha=0.8)
ax.scatter(Pxb_rows_x, Pxb_rows_y, Pxb_rows_z, color='red', label='x set', s=1, alpha=0.8)
ax.scatter(Pyb_rows_x, Pyb_rows_y, Pyb_rows_z, color='black', label='y set', s=1, alpha=0.8)
# 添加图例
ax.legend()
plt.show()
官网中还有很多图例,如下截图
怎么设置图例,出图漂亮
一个应用代码如下: (仅做学习记录,画图看官网)
import numpy as np
import math
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import openxlsx
# 主函数
def main(excel_file, sheet_name):
# 读取Excel文件
df = pd.read_excel(excel_file, sheet_name=sheet_name)
result_rows = []
Oab_rows_x = []
Oab_rows_y = []
Oab_rows_z = []
Pxb_rows_x = []
Pxb_rows_y = []
Pxb_rows_z = []
Pyb_rows_x = []
Pyb_rows_y = []
Pyb_rows_z = []
# 遍历DataFrame的每一行
for index, row in df.iterrows():
Oab = np.array([row['Oab_x'], row['Oab_y'], row['Oab_z']])
Pxb = np.array([row['Pxb_x'], row['Pxb_y'], row['Pxb_z']])
Pyb = np.array([row['Pyb_x'], row['Pyb_y'], row['Pyb_z']])
Oab_row_x = Oab[0]
Oab_rows_x.append(Oab_row_x)
Oab_row_y = Oab[1]
Oab_rows_y.append(Oab_row_y)
Oab_row_z = Oab[2]
Oab_rows_z.append(Oab_row_z)
Pxb_row_x = Pxb[0]
Pxb_rows_x.append(Pxb_row_x)
Pxb_row_y = Pxb[1]
Pxb_rows_y.append(Pxb_row_y)
Pxb_row_z = Pxb[2]
Pxb_rows_z.append(Pxb_row_z)
Pyb_row_x = Pyb[0]
Pyb_rows_x.append(Pyb_row_x)
Pyb_row_y = Pyb[1]
Pyb_rows_y.append(Pyb_row_y)
Pyb_row_z = Pyb[2]
Pyb_rows_z.append(Pyb_row_z)
# 显示图形
fig = plt.figure(figsize=(10, 8)) # 设置图形大小
ax = fig.add_subplot(111, projection='3d')
ax.scatter(Oab_rows_x, Oab_rows_y, Oab_rows_z, label='O set', s=1, alpha=0.8)
ax.scatter(Pxb_rows_x, Pxb_rows_y, Pxb_rows_z, color='red', label='x set', s=1, alpha=0.8)
ax.scatter(Pyb_rows_x, Pyb_rows_y, Pyb_rows_z, color='black', label='y set', s=1, alpha=0.8)
# 添加图例
ax.legend()
plt.show()
# 调用主函数
if __name__ == "__main__":
excel_file = 'C:\\Users\Desktop\output.xlsx' # 假设Excel文件名是data.xlsx
sheet_name = 'Sheet 1' # 假设数据在第一个工作表上
main(excel_file, sheet_name)
其中如下代码是因为报错,可参照链接解决。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
拓展:matplotlib 官方网站
按数据分类:
Pairwise data#
成对、表格、 和函数数据。\((x, y)\)\((var\_0, \cdots, var\_n)\)\(f(x)=y\)
统计类数据
数据集中至少一个变量的分布图。其中一些方法还计算分布。
网格化数据
不规则的网格化数据
3D和立体数据
用户指导
目录如下
Quick start guide#
- A simple example
- Parts of a Figure
- Types of inputs to plotting functions
- Coding styles
- Styling Artists
- Labelling plots
- Axis scales and ticks
- Color mapped data
- Working with multiple Figures and Axes
- More reading
上图是figure的组成元素。要是绘制简单的图形,直接参照Quick start guide官方代码。也可以直接看教程。
教程
Introductory# 初级
Intermediate 中级
-
Legend guide 图例指南
-
Styling with cycler 演示自定义属性周期设置,以控制多线绘图的颜色和其他样式属性。
-
Tight layout guide 紧凑布局
-
Autoscaling Axis 可缩放
Advanced 高级
-
Path effects guide 轨迹效果
-
Transformations Tutorial 官网说应用较少
Colors 颜色设置
See Colors.
Text 文本设置
See Text.
Toolkits 工具箱子
See User Toolkits.
- The axisartist toolkit 自定义轴类
- The axes_grid1 toolkit 网格图工具
- The mplot3d toolkit 3D图工具
Contents