Solution with matplotlib:

#!/usr/bin/python3

import sys

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

import numpy
from numpy.random import randn
from scipy import array, newaxis


# ======
## data:

DATA = array([
    [-0.807237702464, 0.904373229492, 111.428744443],
    [-0.802470821517, 0.832159465335, 98.572957317],
    [-0.801052795982, 0.744231916692, 86.485869328],
    [-0.802505546206, 0.642324228721, 75.279804677],
    [-0.804158144115, 0.52882485495, 65.112895758],
    [-0.806418040943, 0.405733109371, 56.1627277595],
    [-0.808515314192, 0.275100227689, 48.508994388],
    [-0.809879521648, 0.139140394575, 42.1027499025],
    [-0.810645106092, -7.48279012695e-06, 36.8668106345],
    [-0.810676720161, -0.139773175337, 32.714580273],
    [-0.811308686707, -0.277276065449, 29.5977405865],
    [-0.812331692291, -0.40975978382, 27.6210856615],
    [-0.816075037319, -0.535615685086, 27.2420699235],
    [-0.823691366944, -0.654350489595, 29.1823292975],
    [-0.836688691603, -0.765630198427, 34.2275056775],
    [-0.854984518665, -0.86845932028, 43.029581434],
    [-0.879261949054, -0.961799684483, 55.9594146815],
    [-0.740499820944, 0.901631050387, 97.0261463995],
    [-0.735011699497, 0.82881933383, 84.971061395],
    [-0.733021568161, 0.740454485354, 73.733621269],
    [-0.732821755233, 0.638770044767, 63.3815970475],
    [-0.733876941678, 0.525818698874, 54.0655910105],
    [-0.735055978521, 0.403303715698, 45.90859502],
    [-0.736448900325, 0.273425879041, 38.935709456],
    [-0.737556181137, 0.13826504904, 33.096106049],
    [-0.738278724065, -9.73058423274e-06, 28.359664343],
    [-0.738507612286, -0.138781586244, 24.627237837],
    [-0.738539663773, -0.275090412979, 21.857410904],
    [-0.739099040189, -0.406068448513, 20.1110519655],
    [-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]


# ======
## plot:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()

plt.show() # or:
# fig.savefig('3D.png')

Result:

Probably not very beautiful. But it will be, if You provide more points.

Answer from Adobe on Stack Overflow
Top answer
1 of 2
34

Solution with matplotlib:

#!/usr/bin/python3

import sys

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

import numpy
from numpy.random import randn
from scipy import array, newaxis


# ======
## data:

DATA = array([
    [-0.807237702464, 0.904373229492, 111.428744443],
    [-0.802470821517, 0.832159465335, 98.572957317],
    [-0.801052795982, 0.744231916692, 86.485869328],
    [-0.802505546206, 0.642324228721, 75.279804677],
    [-0.804158144115, 0.52882485495, 65.112895758],
    [-0.806418040943, 0.405733109371, 56.1627277595],
    [-0.808515314192, 0.275100227689, 48.508994388],
    [-0.809879521648, 0.139140394575, 42.1027499025],
    [-0.810645106092, -7.48279012695e-06, 36.8668106345],
    [-0.810676720161, -0.139773175337, 32.714580273],
    [-0.811308686707, -0.277276065449, 29.5977405865],
    [-0.812331692291, -0.40975978382, 27.6210856615],
    [-0.816075037319, -0.535615685086, 27.2420699235],
    [-0.823691366944, -0.654350489595, 29.1823292975],
    [-0.836688691603, -0.765630198427, 34.2275056775],
    [-0.854984518665, -0.86845932028, 43.029581434],
    [-0.879261949054, -0.961799684483, 55.9594146815],
    [-0.740499820944, 0.901631050387, 97.0261463995],
    [-0.735011699497, 0.82881933383, 84.971061395],
    [-0.733021568161, 0.740454485354, 73.733621269],
    [-0.732821755233, 0.638770044767, 63.3815970475],
    [-0.733876941678, 0.525818698874, 54.0655910105],
    [-0.735055978521, 0.403303715698, 45.90859502],
    [-0.736448900325, 0.273425879041, 38.935709456],
    [-0.737556181137, 0.13826504904, 33.096106049],
    [-0.738278724065, -9.73058423274e-06, 28.359664343],
    [-0.738507612286, -0.138781586244, 24.627237837],
    [-0.738539663773, -0.275090412979, 21.857410904],
    [-0.739099040189, -0.406068448513, 20.1110519655],
    [-0.741152200369, -0.529726022182, 19.7019157715],
])

Xs = DATA[:,0]
Ys = DATA[:,1]
Zs = DATA[:,2]


# ======
## plot:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

surf = ax.plot_trisurf(Xs, Ys, Zs, cmap=cm.jet, linewidth=0)
fig.colorbar(surf)

ax.xaxis.set_major_locator(MaxNLocator(5))
ax.yaxis.set_major_locator(MaxNLocator(6))
ax.zaxis.set_major_locator(MaxNLocator(5))

fig.tight_layout()

plt.show() # or:
# fig.savefig('3D.png')

Result:

Probably not very beautiful. But it will be, if You provide more points.

2 of 2
14

Please have a look at Axes3D.plot_surface or at the other Axes3D methods. You can find examples and inspirations here, here, or here.

Edit:

Z-Data that is not on a regular X-Y-grid (equal distances between grid points in one dimension) is not trivial to plot as a triangulated surface. For a given set of irregular (X, Y) coordinates, there are multiple possible triangulations. One triangulation can be calculated via a "nearest neighbor" Delaunay algorithm. This can be done in matplotlib. However, it still is a bit tedious:

http://matplotlib.1069221.n5.nabble.com/Plotting-3D-Irregularly-Triangulated-Surfaces-An-Example-td9652.html

It looks like support will be improved:

http://matplotlib.org/examples/pylab_examples/tripcolor_demo.html http://matplotlib.1069221.n5.nabble.com/Custom-plot-trisurf-triangulations-tt39003.html

With the help of http://docs.enthought.com/mayavi/mayavi/auto/example_surface_from_irregular_data.html I was able to come up with a very simple solution based on mayavi:

import numpy as np
from mayavi import mlab

X = np.array([0, 1, 0, 1, 0.75])
Y = np.array([0, 0, 1, 1, 0.75])
Z = np.array([1, 1, 1, 1, 2])

# Define the points in 3D space
# including color code based on Z coordinate.
pts = mlab.points3d(X, Y, Z, Z)

# Triangulate based on X, Y with Delaunay 2D algorithm.
# Save resulting triangulation.
mesh = mlab.pipeline.delaunay2d(pts)

# Remove the point representation from the plot
pts.remove()

# Draw a surface based on the triangulation
surf = mlab.pipeline.surface(mesh)

# Simple plot.
mlab.xlabel("x")
mlab.ylabel("y")
mlab.zlabel("z")
mlab.show()

This is a very simple example based on 5 points. 4 of them are on z-level 1:

(0, 0) (0, 1) (1, 0) (1, 1)

One of them is on z-level 2:

(0.75, 0.75)

The Delaunay algorithm gets the triangulation right and the surface is drawn as expected:

I ran the above code on Windows after installing Python(x,y) with the command

ipython -wthread script.py
๐ŸŒ
Duke
pundit.pratt.duke.edu โ€บ wiki โ€บ Python:Plotting_Surfaces
Python:Plotting Surfaces - PrattWiki
October 17, 2022 - Since the distance between two points \((x, y)\) and \((x_0, y_0)\) is given by \( r=\sqrt{(x-x_0)^2+(y-y_0)^2} \) the code could be: fig = plt.figure(num=1, clear=True) ax = fig.add_subplot(1, 1, 1, projection='3d') (x, y) = np.meshgrid(np.arange(-2, 2.1, 1), np.arange(-1, 1.1, .25)) z = np.sqrt((x-(1))**2 + (y-(-0.5))**2) ax.plot_surface(x, y, z, cmap=cm.Purples) ax.set(xlabel='x', ylabel='y', zlabel='z', title='Distance from (1, -0.5)') fig.tight_layout()
๐ŸŒ
GeeksforGeeks
geeksforgeeks.org โ€บ python โ€บ 3d-surface-plotting-in-python-using-matplotlib
3D Surface plotting in Python using Matplotlib - GeeksforGeeks
April 28, 2025 - where X and Y are 2D array of points of x and y while Z is 2D array of heights.Some more attributes of ax.plot_surface() function are listed below: Example: Let's create a 3D surface by using the above function ...
๐ŸŒ
Stack Overflow
stackoverflow.com โ€บ questions โ€บ 32089662 โ€บ plotting-3d-surface-from-points-coordinates-in-matplotlib
python - Plotting 3D surface from points coordinates in matplotlib - Stack Overflow
May 24, 2017 - @mrgloom That is correct, the data you are using must not be in the correct format for surface_plot. 2018-02-25T18:31:52.83Z+00:00 ... @BasJansen Since in your answer you assume every pair of (x_i, y_j) holds a corresponding Z value, which means Z is a 2D array. While the question is "from points coordinates", which means there is no 2D array for Z at all...
Top answer
1 of 9
186

For surfaces it's a bit different than a list of 3-tuples, you should pass in a grid for the domain in 2d arrays.

If all you have is a list of 3d points, rather than some function f(x, y) -> z, then you will have a problem because there are multiple ways to triangulate that 3d point cloud into a surface.

Here's a smooth surface example:

import numpy as np
from mpl_toolkits.mplot3d import Axes3D  
# Axes3D import has side effects, it enables using projection='3d' in add_subplot
import matplotlib.pyplot as plt
import random

def fun(x, y):
    return x**2 + y

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array(fun(np.ravel(X), np.ravel(Y)))
Z = zs.reshape(X.shape)

ax.plot_surface(X, Y, Z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

2 of 9
60

You can read data direct from some file and plot

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
from sys import argv

x,y,z = np.loadtxt('your_file', unpack=True)

fig = plt.figure()
ax = Axes3D(fig)
surf = ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.1)
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.savefig('teste.pdf')
plt.show()

If necessary you can pass vmin and vmax to define the colorbar range, e.g.

surf = ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.1, vmin=0, vmax=2000)

Bonus Section

I was wondering how to do some interactive plots, in this case with artificial data

from __future__ import print_function
from ipywidgets import interact, interactive, fixed, interact_manual
import ipywidgets as widgets
from IPython.display import Image

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

def f(x, y):
    return np.sin(np.sqrt(x ** 2 + y ** 2))

def plot(i):

    fig = plt.figure()
    ax = plt.axes(projection='3d')

    theta = 2 * np.pi * np.random.random(1000)
    r = i * np.random.random(1000)
    x = np.ravel(r * np.sin(theta))
    y = np.ravel(r * np.cos(theta))
    z = f(x, y)

    ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')
    fig.tight_layout()

interactive_plot = interactive(plot, i=(2, 10))
interactive_plot
๐ŸŒ
Matplotlib
matplotlib.org โ€บ stable โ€บ gallery โ€บ mplot3d โ€บ surface3d.html
3D surface (colormap) โ€” Matplotlib 3.11.2 documentation
Demonstrates plotting a 3D surface colored with the coolwarm colormap. The surface is made opaque by using antialiased=False. Also demonstrates using the LinearLocator and custom formatting for the z axis tick labels. import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import LinearLocator fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) # Make data.
๐ŸŒ
Python Data Science Handbook
jakevdp.github.io โ€บ PythonDataScienceHandbook โ€บ 04.12-three-dimensional-plotting.html
Three-Dimensional Plotting in Matplotlib | Python Data Science Handbook
The function that will help us in this case is ax.plot_trisurf, which creates a surface by first finding a set of triangles formed between adjacent points (remember that x, y, and z here are one-dimensional arrays): ... The result is certainly not as clean as when it is plotted with a grid, but the flexibility of such a triangulation allows for some really interesting three-dimensional plots. For example, it is actually possible to plot a three-dimensional Mรถbius strip using this, as we'll see next.
๐ŸŒ
Medium
medium.com โ€บ @ebimsv โ€บ mastering-matplotlib-part-6-exploring-3d-plotting-0423821e2e10
Matplotlib: Part 6 โ€” Exploring 3D Plotting | by Ebrahim Mousavi | Medium
November 10, 2024 - The mpl_toolkits.mplot3d module in Matplotlib provides tools for creating three-dimensional plots. This module enables you to project data points in a 3D space, making it possible to create line plots, scatter plots, surfaces, and more, all ...
Find elsewhere
๐ŸŒ
Plotly
plotly.com โ€บ python โ€บ 3d-surface-plots
3d surface plots in Python
import plotly.graph_objects as go from plotly.subplots import make_subplots # Equation of ring cyclide # see https://en.wikipedia.org/wiki/Dupin_cyclide import numpy as np a, b, d = 1.32, 1., 0.8 c = a**2 - b**2 u, v = np.mgrid[0:2*np.pi:100j, 0:2*np.pi:100j] x = (d * (c - a * np.cos(u) * np.cos(v)) + b**2 * np.cos(u)) / (a - c * np.cos(u) * np.cos(v)) y = b * np.sin(u) * (a - d*np.cos(v)) / (a - c * np.cos(u) * np.cos(v)) z = b * np.sin(v) * (c*np.cos(u) - d) / (a - c * np.cos(u) * np.cos(v)) fig = make_subplots(rows=1, cols=2, specs=[[{'is_3d': True}, {'is_3d': True}]], subplot_titles=['Colo
๐ŸŒ
TutorialsPoint
tutorialspoint.com โ€บ matplotlib โ€บ matplotlib_3d_surface_plot.htm
Matplotlib - 3D Surface Plots
The coordinates form a surface where height or depth (Z-axis) at each point gives the plot its three-dimensional shape. In the following example, we are creating a basic 3D surface plot by evenly spacing the X and Y coordinates and then finding ...
๐ŸŒ
Python Graph Gallery
python-graph-gallery.com โ€บ 371-surface-plot
Surface Plot
fig = plt.figure() ax = fig.gca(projection='3d') surf=ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=plt.cm.viridis, linewidth=0.2) fig.colorbar( surf, shrink=0.5, aspect=5) plt.show() # Rotate it fig = plt.figure() ax = fig.gca(projection='3d') surf=ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=plt.cm.viridis, linewidth=0.2) ax.view_init(30, 45) plt.show() # Other palette fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=plt.cm.jet, linewidth=0.01) plt.show()
๐ŸŒ
Fabrizio Guerrieri
fabrizioguerrieri.com โ€บ blog โ€บ surface-graphs-with-irregular-dataset
Use Python to plot Surface graphs of irregular Datasets
January 21, 2022 - Do you want to plot a surface graph of a 3D dataset but your data is not distributed on a regular meshgrid? No need to worry as Matplotlib's trisurf got you covered. Here is how to use it. ... import numpy as np import matplotlib.pyplot as plt import matplotlib.tri as mtri from mpl_toolkits.mplot3d import Axes3D ยท Create an irregular grid of (x,y) coordinates and the relative z-data ยท points = 500 data = np.zeros([points,3]) x = np.random.rand(points)*100 y = np.random.rand(points)*100 z = np.sinc((x-20)/100*3.14) + np.sinc((y-50)/100*3.14)
๐ŸŒ
Problem Solving with Python
problemsolvingwithpython.com โ€บ 06-Plotting-with-Matplotlib โ€บ 06.16-3D-Surface-Plots
3D Surface Plots - Problem Solving with Python
Surface plots are created with Matplotlib's ax.plot_surface() method. By default, surface plots are a single color. The general format of Matplotlib's ax.plot_surface() method is below. ax.plot_surface(X, Y, Z) Where X and Y are 2D array of x and y points and Z is a 2D array of heights.
๐ŸŒ
Matplotlib
matplotlib.org โ€บ stable โ€บ plot_types โ€บ 3D โ€บ surface3d_simple.html
plot_surface(X, Y, Z) โ€” Matplotlib 3.11.2 documentation
import matplotlib.pyplot as plt import numpy as np plt.style.use('_mpl-gallery') # Make data X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) # Plot the surface fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) ax.plot_surface(X, Y, Z, vmin=Z.min() * 2, cmap="Blues") ax.set(xticklabels=[], yticklabels=[], zticklabels=[]) plt.show() Download Jupyter notebook: surface3d_simple.ipynb ยท Download Python source code: surface3d_simple.py ยท
Top answer
1 of 2
4

It is possible to plot the 3D surface over your scatter plot using the plt.plot_trisurf(...) function as long as you find the right ordering of vertices for the triangles. There is a function from SciPy called ConvexHull which finds the simplices of the points on the outside of the data set. This is very handy, but does not immediately work on this example because your data set is not convex!

The solution is to make the data convex by expanding the points away from the center until they form a sphere. See below for a visualization of this.

After turning the head into a sphere it is now possible to call ConvexHull(...) to get the desired triangulation. This triangulation can be applied to the spherical head first (see below). Then, the head can be shrunk back into its original form, and the triangulation's vertices are still valid!

This is the final product!

Code

import numpy as np
import matplotlib.pyplot as plt
import csv
from scipy.spatial import KDTree
from scipy.spatial import ConvexHull
from matplotlib import cm
from matplotlib import animation

plt.style.use('dark_background')

# Data reader from a .csv file
def getData(file):
    lstX = []
    lstY = []
    lstZ = []
    with open(file, newline='\n') as f:
        reader = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
        for row in reader:
            lstX.append(row[0])
            lstY.append(row[1])
            lstZ.append(row[2])
    return lstX, lstY, lstZ

# This function gets rid of the triangles at the base of the neck
# It just filters out any triangles which have at least one side longer than toler
def removeBigTriangs(points, inds, toler=35):
    newInds = []
    for ind in inds:
        if ((np.sqrt(np.sum((points[ind[0]]-points[ind[1]])**2, axis=0))<toler) and
            (np.sqrt(np.sum((points[ind[0]]-points[ind[2]])**2, axis=0))<toler) and
            (np.sqrt(np.sum((points[ind[1]]-points[ind[2]])**2, axis=0))<toler)):
            newInds.append(ind)
    return np.array(newInds)

# this calculates the location of each point when it is expanded out to the sphere
def calcSpherePts(points, center):
    kdtree = KDTree(points) # tree of nearest points
    # d is an array of distances, i is array of indices
    d, i = kdtree.query(center, points.shape[0])
    spherePts = np.zeros(points.shape, dtype=float)
    
    radius = np.amax(d)
    for p in range(points.shape[0]):
        spherePts[p] = points[i[p]] *radius /d[p]
    return spherePts, i # points and the indices for where they were in the original lists
    

x,y,z = getData(".\coords3Ddetailed.csv")

pts = np.stack((x,y,z), axis=1)

# generating data
spherePts, sphereInd = calcSpherePts(pts, [0,0,0])
hull = ConvexHull(spherePts)
triangInds = hull.simplices # returns the list of indices for each triangle
triangInds = removeBigTriangs(pts[sphereInd], triangInds)

# plotting!
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
ax.scatter3D(pts[:,0], pts[:,1], pts[:,2], s=2, c='r', alpha=1.0)
ax.plot_trisurf(pts[sphereInd,0], pts[sphereInd,1], pts[sphereInd,2], triangles=triangInds, cmap=cm.Blues, alpha=1.0)
plt.show()
2 of 2
3

A constant radial position for using the convex hull method by trent is excellent and should be included in your solution methods toolkit. The visual explanation in the answer is also excellent. Very useful for creating a closed surface from a dataset dependent on polar and azimuthal positions.

However, if the dataset represents a concave surface, this method may not work. For example a dataset for a hand instead of a head. Even the head example has a small problem with this since the ears fold over, as shown below:

The simple 3-step process of transforming the data to a sphere, creating a convex hull surface, then finally transforming the surface vertices back to the original values is summarized in the code below using the S3Dlib package. The code is basic, not optimizing or removing triangles.

import csv
import numpy as np
import matplotlib.pyplot as plt
import s3dlib.surface as s3d

csv_data = []
with open('data/head.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=' ')
    for row in csv_reader: csv_data.append(row)    
geom = np.array([ c[1:4] for c in csv_data ]).astype(float).T   #.. shape: (3,N)

def toSphere(xyz) :
    rtp = s3d.SphericalSurface.coor_convert(xyz,False)
    rtp[0] = np.ones(len(rtp[0]))
    return s3d.SphericalSurface.coor_convert(rtp,True)

surface = s3d.Surface3DCollection.chull( toSphere(geom).T, color='w' )
surface.map_geom_from_op(lambda rtp: geom)

fig = plt.figure(figsize=plt.figaspect(1))
ax = plt.axes(projection='3d')
s3d.auto_scale(ax,surface,rscale=0.55).add_collection3d(surface.shade())
ax.set_axis_off()
ax.view_init(20,-105)
fig.tight_layout(pad=0)
plt.show()

Also, when visualizing physical surfaces, set the Matplotlib axes limits to the same scale for a more realistic view. The following shows the comparison:

๐ŸŒ
Berkeley
pythonnumericalmethods.studentorg.berkeley.edu โ€บ notebooks โ€บ chapter12.02-3D-Plotting.html
3D Plotting โ€” Python Numerical Methods
We could plot 3D surfaces in Python too, the function to plot the 3D surfaces is plot_surface(X,Y,Z), where X and Y are the output arrays from meshgrid, and \(Z = f (X,Y)\) or \(Z (i,j) = f (X (i,j),Y (i,j))\).
๐ŸŒ
GeeksforGeeks
geeksforgeeks.org โ€บ python โ€บ three-dimensional-plotting-in-python-using-matplotlib
Three-dimensional Plotting in Python using Matplotlib - GeeksforGeeks
Colors are set by c = x + y, adding a fourth dimension to visualize variation across points. Surface plots show a smooth surface that spans across a grid of (x, y) values and is shaped by z values.
Published: July 15, 2025
๐ŸŒ
TutorialsPoint
tutorialspoint.com โ€บ plot-a-3d-surface-from-x-y-z-scatter-data-in-python-matplotlib
Plot a 3D surface from {x,y,z}-scatter data in Python Matplotlib
June 5, 2021 - Plot x, y and z data points using plot_surface() method. To display the figure, use show() method. import matplotlib.pyplot as plt import numpy as np plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ...
๐ŸŒ
HCL GUVI
studytonight.com โ€บ matplotlib โ€บ matplotlib-3d-surface-plot-plot_surface-function
HCL GUVI | Learn to code in your native language
November 11, 2020 - HCL GUVI's Data Science Program was just fantastic. It covered statistics, machine learning, data visualization, and Python within its curriculum.