使用Python的matplotlib包绘制三维图像

画出随机生成三维点坐标

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()

猜你喜欢

转载自blog.csdn.net/sinat_38089181/article/details/82594917
今日推荐