画出随机生成三维点坐标
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文件的点图
扫描二维码关注公众号,回复:
3189801 查看本文章
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()