# Matplotlib 3D Surface Plot - plot_surface() Function

In this tutorial, we will cover how to create a 3D Surface Plot in the matplotlib library.

In Matplotlib's mpl_toolkits.mplot3d toolkit there is `axes3d` present that provides the necessary functions that are very useful in creating 3D surface plots.

The representation of a three-dimensional dataset is mainly termed as the Surface Plot.

• One thing is important to note that the surface plot provides a relationship between two independent variables that are X and Z and a designated dependent variable that is Y, rather than just showing the individual data points.

• The Surface plot is a companion plot to the Contour Plot and it is similar to wireframe plot but there is a difference too and it is each wireframe is basically a filled polygon.

• With the help of this, the topology of the surface can be visualized very easily.

## Creation of 3D Surface Plot

To create the 3-dimensional surface plot the `ax.plot_surface()` function is used in matplotlib.

The required syntax for this function is given below:

``ax.plot_surface(X, Y, Z)``

In the above syntax, the X and Y mainly indicate a 2D array of points x and y while Z is used to indicate the 2D array of heights.

### `plot_surface()` Attributes

Some attributes of this function are as given below:

This attribute is used to shade the face color.

2. facecolors

This attribute is used to indicate the face color of the individual surface

3. vmax

This attribute indicates the maximum value of the map.

4. vmin

This attribute indicates the minimum value of the map.

5. norm

This attribute acts as an instance to normalize the values of color map

6. color

This attribute indicates the color of the surface

7. cmap

This attribute indicates the colormap of the surface

8. rcount

This attribute is used to indicate the number of rows to be used The default value of this attribute is 50

9. ccount

This attribute is used to indicate the number of columns to be used The default value of this attribute is 50

10. rstride

This attribute is used to indicate the array of row stride(that is step size)

11. cstride

This attribute is used to indicate the array of column stride(that is step size)

## 3D Surface Plot Basic Example

Below we have a code where we will use the above-mentioned function to create a 3D Surface Plot:

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

x = np.outer(np.linspace(-4, 4, 33), np.ones(33))
y = x.copy().T
z = (np.sin(x **2) + np.cos(y **2) )

fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')

ax.plot_surface(x, y, z)

plt.show() ``````

The output for the above code is as follows:

This plot is a combination of a 3D surface plot with a 2D contour plot. In the Gradient surface plot, the 3D surface is colored same as the 2D contour plot. The parts that are high on the surface contains different color rather than the parts which are low at the surface.

The required syntax is:

``ax.plot_surface(X, Y, Z, cmap, linewidth, antialiased)``

where `cmap` is used to set the color for the surface.

Now it's time to cover a gradient surface plot. The code snippet for the same is given below:

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

x = np.outer(np.linspace(-3, 3, 32), np.ones(32))
y = x.copy().T
z = (np.sin(x **2) + np.cos(y **2) )

fig = plt.figure(figsize =(14, 9))
ax = plt.axes(projection ='3d')

my_cmap = plt.get_cmap('cool')

surf = ax.plot_surface(x, y, z, cmap = my_cmap, edgecolor ='none')

fig.colorbar(surf, ax = ax, shrink = 0.7, aspect = 7)

ax.set_title('Surface plot')

plt.show() ``````

The output for the above code is as follows: