Just like 2-Dimenstional plots you can also create 3-Dimensional plots in Python using matplotlib. In this tutorial, we will learn how to plot 3-Dimensional plots using matplotlib.

## How to Plot 3-Dimensional Plots in Python?

We will be using the **mplot3d **toolkit along with the **matpotlib library. **The mplot3d toolkit is built upon the matplotlib library to make it easy to create 3-Dimensional plots.

So without any further delay, let’s get started!

### 1. Import the necessary modules

To begin with, we will import **matplotlib and the mplot3d toolkit**. Along with these two, we will also **import numpy**** **for creating sample data. The code for importing these three is given below.

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
```

### 2. Create three-dimensional axes

Now we can create three-dimensional axes using the imported modules.

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
plt.show()
```

Output:

Now that we have the axes, let’s try plotting something. While plotting we need to make sure that we provide values for all the three ( x,y and z) axes.

In the following sections, we will learn how to make a spiral using *sinusoidal functions(sine and cosine).*

Before that we will learn how to add a title to the plot.

### 3. Adding a title to the plot

You can add a title to your plots using the set_title() method:

```
ax.set_title('Learning about 3D plots')
```

To see the above line of code in action, run the following :

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#set title
ax.set_title('Learning about 3D plots')
plt.show()
```

Output :

### 4. Create a spiral

To create a spiral we will use **sine function along the x-axis** and **cosine function along the y-axis. **

The data-points for a spiral can be generated as follows:

```
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
```

Here the function np.linespace gives 1000 equally spaced points between 0 and 15.

The complete code is as follows:

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiral
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
plt.show()
```

**Output :**

### 5. Change the viewing angle

3-Dimensional plots look different depending on the viewing angle. You can change the viewing angle of the 3-Dimensional plots using the view_init() method:

```
ax.view_init(60, 50)
```

The complete code is given below:

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiral
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
ax.view_init(60, 50)
plt.show()
```

Output :

Here we mention two arguments, the elevation and the angle of the axes(in degrees).

Let’s try another angle.

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#cordiates for spiral
z = np.linspace(0, 15, 1000)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z, 'red')
ax.view_init(120, 90)
plt.show()
```

Output :

### 6. Plotting a wire-frame

You can plot a 3-Dimensional wireframe using the plot_wireframe() method as shown in the below example:

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#function for Z values
def f(x, y):
return np.cos(np.sqrt(x ** 2 + y ** 2))
# x and y values
x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax = plt.axes(projection ='3d')
ax.plot_wireframe(X, Y, Z, color ='red')
plt.show()
```

Output :

Here the function np.meshgrid creates coordinate matrices from coordinate vectors.

Similarly, you can also create a surface plot. Let’s learn how to do that in the next section.

### 7. Create a surface plot

We can create a surface plot with the same data as above. To create a 3-Dimensional surface plot, we’ll use the plot_surface() method.

```
from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
#create 3d axes
fig = plt.figure()
ax = plt.axes(projection='3d')
#function for Z values
def f(x, y):
return np.cos(np.sqrt(x ** 2 + y ** 2))
# x and y values
x = np.linspace(1, 10, 10)
y = np.linspace(1, 10, 10)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax = plt.axes(projection ='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis')
plt.show()
```

Output :

**Here, the following arguments mean the following :**

rstride | Array row stride (step size) |

cstride | Array column stride (step size) |

camp | A colourmap for the surface patches. |

## Conclusion

This tutorial was about 3-Dimensional plots in Python. We learned how to plot the 3-Dimensional axes along with data-points. To learn about more 3-Dimensional shapes under mplot3d, refer to their official documentation.