Mar-20-2024, 02:54 PM
hello everyone,
i am trying to plot this : (first image). It's basically a cylinder with two hemisphere : one on the top of the cylinder and one on the bottom.
I did it by plotting cylinder and the two hemispheres separately. For each, I have 3 arrays : one for X data, one for Y data and one for Z data (so I have 9 array in total).
I would like, to create only 3 arrays that contain :
- one with all X arrays together ;
- one with all Y arrays together ;
- one with all Z arrays together ;
- and plot everything to obtain the same figure ;
I tried with np.concatenate() function but I got this : (second image). We can see that there is a small difference between first and second picture.
How to procede ? Thanks for your help ! :)
Here is my code below :
i am trying to plot this : (first image). It's basically a cylinder with two hemisphere : one on the top of the cylinder and one on the bottom.
I did it by plotting cylinder and the two hemispheres separately. For each, I have 3 arrays : one for X data, one for Y data and one for Z data (so I have 9 array in total).
I would like, to create only 3 arrays that contain :
- one with all X arrays together ;
- one with all Y arrays together ;
- one with all Z arrays together ;
- and plot everything to obtain the same figure ;
I tried with np.concatenate() function but I got this : (second image). We can see that there is a small difference between first and second picture.
How to procede ? Thanks for your help ! :)
Here is my code below :
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D long = 20 fig = plt.figure() ax = plt.axes(projection='3d') # PLOTTING CYLINDER theta = np.linspace(0, 2*np.pi, 100) z = np.linspace(0, long-2, len(theta)) theta_grid_cylindre, z_grid_cylindre = np.meshgrid(theta, z) x_grid_cylindre = 1*np.cos(theta_grid_cylindre) + 0 y_grid_cylindre = 1*np.sin(theta_grid_cylindre) + 0 z_grid_cylindre = z_grid_cylindre + 1 #PLOTTING FIRST HEMISPHERE theta_1 = np.linspace(0, np.pi/2, 100) x, y = np.meshgrid(theta, theta_1) x_grid_sphere = np.cos(x)*np.sin(y) y_grid_sphere = np.sin(x)*np.sin(y) z_grid_sphere = np.cos(y)+long-1 #PLOTTING SECOND HEMISPHERE theta_2 = np.linspace(0, np.pi/2, 100) x_bas, y_bas = np.meshgrid(theta, theta_2) x_grid_sphere_bas = np.cos(x_bas)*np.sin(y_bas) y_grid_sphere_bas = np.sin(x_bas)*np.sin(y_bas) z_grid_sphere_bas = -np.cos(y_bas)+1 # TRYING TO CONCATENATE ALL ARRAY test_x = np.concatenate((x_grid_sphere,x_grid_cylindre,x_grid_sphere_bas),axis=1) test_y = np.concatenate((y_grid_sphere,y_grid_cylindre,y_grid_sphere_bas),axis=1) test_z = np.concatenate((z_grid_sphere,z_grid_cylindre,z_grid_sphere_bas),axis=1) # PLOTTING EACH PIECE SEPARATELY ax.plot_surface(x_grid_sphere, y_grid_sphere,z_grid_sphere, color ="green", alpha=0.5) ax.plot_surface(x_grid_cylindre, y_grid_cylindre,z_grid_cylindre, color ="green", alpha=0.5) ax.plot_surface(x_grid_sphere_bas, y_grid_sphere_bas,z_grid_sphere_bas, color ="green", alpha=0.5) # TRYING TO PLOT ALL IN ONE ax.plot_surface(test_x,test_y,test_z, color ="green", alpha=0.5) plt.show()