使用Python的matplotlib包绘制三维图像
程序员文章站
2022-03-20 12:05:55
...
画出随机生成三维点坐标
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline #Jupyter
from mpl_toolkits.mplot3d import Axes3D
data = np.random.randint(0, 255, size=[40, 40, 40]) #随机生成三维数据
x, y, z = data[0], data[1], data[2]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(x[:10], y[:10], z[:10], c='y') # 绘制数据点
ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()
效果如下:
from matplotlib import pyplot as plt
%matplotlib inline
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()
效果如下:
画出外部导入的.csv文件中的点
import pandas as pd
import matplotlib as mb
import matplotlib.pyplot as plt
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
csv = pd.read_csv('./data/1/all_particles_600.csv') # 文件路径
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
# 将数据点分成三部分画,在颜色上有区分度
ax.scatter(csv.position_x, csv.position_z, csv.position_y, c='b') # 绘制数据点
plt.xlim((-6, 6))
plt.ylim((-4, 10))
#plt.zlim((-3, 3))
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()
csv文件内容如下:
效果如下:
将csv文件中前n行用红色标记点,后m行用蓝色标记点
import pandas as pd
import matplotlib as mb
import matplotlib.pyplot as plt
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
from IPython.display import clear_output
file_name ='./data/1/0/all_particles'
csv1 = pd.read_csv(file_name).iloc[:11468,0:3]
csv2 = pd.read_csv(file_name).iloc[11469:,0:3]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
plt.xlim((-6, 6))
plt.ylim((-4, 10))
#plt.zlim((-3, 3))
ax.scatter(csv2.position_x, csv2.position_z, csv2.position_y, c='b') # 绘制数据点
ax.scatter(csv1.position_x, csv1.position_z, csv1.position_y, c='r') # 绘制数据点
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
# 将数据点分成三部分画,在颜色上有区分度
plt.title('Frame 750')
plt.show()
效果如下:
使用FOR循环画出多个csv文件中的点
方法一:循环依次画出每个csv文件的点图
import pandas as pd
import matplotlib as mb
import matplotlib.pyplot as plt
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
from IPython.display import clear_output
for i in range(500,1201,50):
file_name ='./data/1/2/all_particles_'+ str(i)+'.csv'
csv1 = pd.read_csv(file_name).iloc[:11468,0:3]
csv2 = pd.read_csv(file_name).iloc[11469:,0:3]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
plt.xlim((-6, 6))
plt.ylim((-4, 10))
#plt.zlim((-3, 3))
ax.scatter(csv2.position_x, csv2.position_z, csv2.position_y, c='b') # 绘制数据点
ax.scatter(csv1.position_x, csv1.position_z, csv1.position_y, c='r') # 绘制数据点
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
# 将数据点分成三部分画,在颜色上有区分度
#clear_output(True)
plt.title('Frame %s ' %(i))
plt.show()
方法二:在同一个三维坐标里循环画图
import pandas as pd
import matplotlib as mb
import matplotlib.pyplot as plt
%matplotlib inline
from mpl_toolkits.mplot3d import Axes3D
from IPython.display import clear_output
for i in range(500,1201,25):
file_name ='./data/1/2/all_particles_'+ str(i)+'.csv'
csv1 = pd.read_csv(file_name).iloc[:11468,0:3]
csv2 = pd.read_csv(file_name).iloc[11469:,0:3]
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
plt.xlim((-6, 6))
plt.ylim((-4, 10))
#plt.zlim((-3, 3))
ax.scatter(csv2.position_x, csv2.position_z, csv2.position_y, c='b') # 绘制数据点
ax.scatter(csv1.position_x, csv1.position_z, csv1.position_y, c='r') # 绘制数据点
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
# 将数据点分成三部分画,在颜色上有区分度
clear_output(True)
plt.title('Frame %s ' %(i))
plt.show()
推荐阅读
-
Python Matplotlib实现三维数据的散点图绘制
-
Python实现在tkinter中使用matplotlib绘制图形的方法示例
-
Python使用matplotlib的pie函数绘制饼状图功能示例
-
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
-
python使用PyGame绘制图像并保存为图片文件的方法
-
Python使用matplotlib绘制多个图形单独显示的方法示例
-
在Linux下使用Python的matplotlib绘制数据图的教程
-
Python使用matplotlib绘制正弦和余弦曲线的方法示例
-
在使用python的matplotlib绘制图形时出现中文乱码
-
在Python中使用matplotlib模块绘制数据图的示例