3D plot of the CONE using matplotlib Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!How do you change the size of figures drawn with matplotlib?Plot logarithmic axes with matplotlib in pythonHiding axis text in matplotlib plotsHow to change the font size on a matplotlib plotHow to put the legend out of the plotWhen to use cla(), clf() or close() for clearing a plot in matplotlib?Save plot to image file instead of displaying it using MatplotlibHow to make IPython notebook matplotlib plot inlineInstallation Issue with matplotlib PythonPython Matplotlib - how to set values on y axis in barchart

Why is it faster to reheat something than it is to cook it?

In musical terms, what properties are varied by the human voice to produce different words / syllables?

Can the Flaming Sphere spell be rammed into multiple Tiny creatures that are in the same 5-foot square?

Significance of Cersei's obsession with elephants?

Why weren't discrete x86 CPUs ever used in game hardware?

What's the point of the test set?

Flight departed from the gate 5 min before scheduled departure time. Refund options

Lagrange four-squares theorem --- deterministic complexity

What is an "asse" in Elizabethan English?

Random body shuffle every night—can we still function?

Why does it sometimes sound good to play a grace note as a lead in to a note in a melody?

What does this say in Elvish?

How to report t statistic from R

What does it mean that physics no longer uses mechanical models to describe phenomena?

Do I really need to have a message in a novel to appeal to readers?

What are the discoveries that have been possible with the rejection of positivism?

What would you call this weird metallic apparatus that allows you to lift people?

How were pictures turned from film to a big picture in a picture frame before digital scanning?

The test team as an enemy of development? And how can this be avoided?

Project Euler #1 in C++

preposition before coffee

Is multiple magic items in one inherently imbalanced?

Can a new player join a group only when a new campaign starts?

Should a wizard buy fine inks every time he want to copy spells into his spellbook?



3D plot of the CONE using matplotlib



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!How do you change the size of figures drawn with matplotlib?Plot logarithmic axes with matplotlib in pythonHiding axis text in matplotlib plotsHow to change the font size on a matplotlib plotHow to put the legend out of the plotWhen to use cla(), clf() or close() for clearing a plot in matplotlib?Save plot to image file instead of displaying it using MatplotlibHow to make IPython notebook matplotlib plot inlineInstallation Issue with matplotlib PythonPython Matplotlib - how to set values on y axis in barchart



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I'm looking for help to draw a 3D cone using matplotlib.
My goal is to draw a HSL cone, then base on the vertex coordinats i will select the color.



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

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

theta1 = np.linspace(0, 2*np.pi, 100)
r1 = np.linspace(-2, 0, 100)
t1, R1 = np.meshgrid(theta1, r1)

X1 = R1*np.cos(t1)
Y1 = R1*np.sin(t1)
Z1 = 5+R1*2.5

theta2 = np.linspace(0, 2*np.pi, 100)
r2 = np.linspace(0, 2, 100)
t2, R2 = np.meshgrid(theta2, r2)

X2 = R2*np.cos(t2)
Y2 = R2*np.sin(t2)
Z2 = -5+R2*2.5


ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
# ax.set_xlim(-2.5, 2.5)
# ax.set_ylim(-2.5, 2.5)
# ax.set_zlim(0, 5)
ax.set_aspect('equal')

ax.plot_surface(X1, Y1, Z1, alpha=0.8, color="blue")
ax.plot_surface(X2, Y2, Z2, alpha=0.8, color="blue")
# ax.plot_surface(X, Y, Z, alpha=0.8)
#fig. savefig ("Cone.png", dpi=100, transparent = False)

plt.show()


HSL CONE



My cone



So my question now is how to define color of each element.










share|improve this question
























  • Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

    – Valentino
    Mar 22 at 11:04











  • Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

    – kking
    Mar 22 at 11:45











  • An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

    – swatchai
    Mar 22 at 12:36

















0















I'm looking for help to draw a 3D cone using matplotlib.
My goal is to draw a HSL cone, then base on the vertex coordinats i will select the color.



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

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

theta1 = np.linspace(0, 2*np.pi, 100)
r1 = np.linspace(-2, 0, 100)
t1, R1 = np.meshgrid(theta1, r1)

X1 = R1*np.cos(t1)
Y1 = R1*np.sin(t1)
Z1 = 5+R1*2.5

theta2 = np.linspace(0, 2*np.pi, 100)
r2 = np.linspace(0, 2, 100)
t2, R2 = np.meshgrid(theta2, r2)

X2 = R2*np.cos(t2)
Y2 = R2*np.sin(t2)
Z2 = -5+R2*2.5


ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
# ax.set_xlim(-2.5, 2.5)
# ax.set_ylim(-2.5, 2.5)
# ax.set_zlim(0, 5)
ax.set_aspect('equal')

ax.plot_surface(X1, Y1, Z1, alpha=0.8, color="blue")
ax.plot_surface(X2, Y2, Z2, alpha=0.8, color="blue")
# ax.plot_surface(X, Y, Z, alpha=0.8)
#fig. savefig ("Cone.png", dpi=100, transparent = False)

plt.show()


HSL CONE



My cone



So my question now is how to define color of each element.










share|improve this question
























  • Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

    – Valentino
    Mar 22 at 11:04











  • Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

    – kking
    Mar 22 at 11:45











  • An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

    – swatchai
    Mar 22 at 12:36













0












0








0








I'm looking for help to draw a 3D cone using matplotlib.
My goal is to draw a HSL cone, then base on the vertex coordinats i will select the color.



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

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

theta1 = np.linspace(0, 2*np.pi, 100)
r1 = np.linspace(-2, 0, 100)
t1, R1 = np.meshgrid(theta1, r1)

X1 = R1*np.cos(t1)
Y1 = R1*np.sin(t1)
Z1 = 5+R1*2.5

theta2 = np.linspace(0, 2*np.pi, 100)
r2 = np.linspace(0, 2, 100)
t2, R2 = np.meshgrid(theta2, r2)

X2 = R2*np.cos(t2)
Y2 = R2*np.sin(t2)
Z2 = -5+R2*2.5


ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
# ax.set_xlim(-2.5, 2.5)
# ax.set_ylim(-2.5, 2.5)
# ax.set_zlim(0, 5)
ax.set_aspect('equal')

ax.plot_surface(X1, Y1, Z1, alpha=0.8, color="blue")
ax.plot_surface(X2, Y2, Z2, alpha=0.8, color="blue")
# ax.plot_surface(X, Y, Z, alpha=0.8)
#fig. savefig ("Cone.png", dpi=100, transparent = False)

plt.show()


HSL CONE



My cone



So my question now is how to define color of each element.










share|improve this question
















I'm looking for help to draw a 3D cone using matplotlib.
My goal is to draw a HSL cone, then base on the vertex coordinats i will select the color.



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

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

theta1 = np.linspace(0, 2*np.pi, 100)
r1 = np.linspace(-2, 0, 100)
t1, R1 = np.meshgrid(theta1, r1)

X1 = R1*np.cos(t1)
Y1 = R1*np.sin(t1)
Z1 = 5+R1*2.5

theta2 = np.linspace(0, 2*np.pi, 100)
r2 = np.linspace(0, 2, 100)
t2, R2 = np.meshgrid(theta2, r2)

X2 = R2*np.cos(t2)
Y2 = R2*np.sin(t2)
Z2 = -5+R2*2.5


ax.set_xlabel('x axis')
ax.set_ylabel('y axis')
ax.set_zlabel('z axis')
# ax.set_xlim(-2.5, 2.5)
# ax.set_ylim(-2.5, 2.5)
# ax.set_zlim(0, 5)
ax.set_aspect('equal')

ax.plot_surface(X1, Y1, Z1, alpha=0.8, color="blue")
ax.plot_surface(X2, Y2, Z2, alpha=0.8, color="blue")
# ax.plot_surface(X, Y, Z, alpha=0.8)
#fig. savefig ("Cone.png", dpi=100, transparent = False)

plt.show()


HSL CONE



My cone



So my question now is how to define color of each element.







python matplotlib 3d






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 22 at 12:05







kking

















asked Mar 22 at 10:58









kkingkking

11




11












  • Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

    – Valentino
    Mar 22 at 11:04











  • Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

    – kking
    Mar 22 at 11:45











  • An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

    – swatchai
    Mar 22 at 12:36

















  • Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

    – Valentino
    Mar 22 at 11:04











  • Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

    – kking
    Mar 22 at 11:45











  • An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

    – swatchai
    Mar 22 at 12:36
















Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

– Valentino
Mar 22 at 11:04





Hello! Did you try anything? Please share your efforts and explain where you are struck. As it is, It seems that you are expenting people do the work for you. See how to ask.

– Valentino
Mar 22 at 11:04













Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

– kking
Mar 22 at 11:45





Hi, sorry, I did'n mean that. The thing is, I know how to build a 3d cone, but now I'm looking for the method how to define the vertex color base on the vertex coordinats.

– kking
Mar 22 at 11:45













An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

– swatchai
Mar 22 at 12:36





An example here: matplotlib.org/gallery/mplot3d/… may be helpful.

– swatchai
Mar 22 at 12:36












1 Answer
1






active

oldest

votes


















0














i have found a solution, maybe it will be usefull for others.



from mpl_toolkits.mplot3d import Axes3D

from matplotlib import cm

import matplotlib.pyplot as plt

import numpy as np
import colorsys


from matplotlib.tri import Triangulation

from mpl_toolkits.mplot3d.art3d import Poly3DCollection


n_angles = 80

n_radii = 20


# An array of radii

# Does not include radius r=0, this is to eliminate duplicate points

radii = np.linspace(0.0, 0.5, n_radii)


# An array of angles

angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)


# Repeat all angles for each radius

angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)


# Convert polar (radii, angles) coords to cartesian (x, y) coords

# (0, 0) is added here. There are no duplicate points in the (x, y) plane


x = np.append(0, (radii*np.cos(angles)).flatten())

y = np.append(0, (radii*np.sin(angles)).flatten())


# Pringle surface

z = 1+-np.sqrt(x**2+y**2)*2


print(x.shape, y.shape, angles.shape, radii.shape, z.shape)

# NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
tri = Triangulation(x, y)

triangle_vertices = np.array([np.array([[x[T[0]], y[T[0]], z[T[0]]],

[x[T[1]], y[T[1]], z[T[1]]],

[x[T[2]], y[T[2]], z[T[2]]]]) for T in tri.triangles])


x2 = np.append(0, (radii*np.cos(angles)).flatten())

y2 = np.append(0, (radii*np.sin(angles)).flatten())


# Pringle surface
z2 = -1+np.sqrt(x**2+y**2)*2


# NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
tri2 = Triangulation(x2, y2)

triangle_vertices2 = np.array([np.array([[x2[T[0]], y2[T[0]], z2[T[0]]],

[x2[T[1]], y2[T[1]], z2[T[1]]],

[x2[T[2]], y2[T[2]], z2[T[2]]]]) for T in tri2.triangles])

triangle_vertices = np.concatenate([triangle_vertices, triangle_vertices2])

midpoints = np.average(triangle_vertices, axis=1)


def find_color_for_point(pt):

c_x, c_y, c_z = pt

angle = np.arctan2(c_x, c_y)*180/np.pi

if (angle < 0):
angle = angle + 360

if c_z < 0:

l = 0.5 - abs(c_z)/2
#l=0
if c_z == 0:
l = 0.5
if c_z > 0:
l = (1 - (1-c_z)/2)

if c_z > 0.97:

l = (1 - (1-c_z)/2)

col = colorsys.hls_to_rgb(angle/360, l, 1)

return col


facecolors = [find_color_for_point(pt) for pt in midpoints] # smooth gradient
# facecolors = [np.random.random(3) for pt in midpoints] # random colors


coll = Poly3DCollection(
triangle_vertices, facecolors=facecolors, edgecolors=None)


fig = plt.figure()

ax = fig.gca(projection='3d')

ax.add_collection(coll)

ax.set_xlim(-1, 1)

ax.set_ylim(-1, 1)

ax.set_zlim(-1, 1)

ax.elev = 50


plt.show()





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55298164%2f3d-plot-of-the-cone-using-matplotlib%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    i have found a solution, maybe it will be usefull for others.



    from mpl_toolkits.mplot3d import Axes3D

    from matplotlib import cm

    import matplotlib.pyplot as plt

    import numpy as np
    import colorsys


    from matplotlib.tri import Triangulation

    from mpl_toolkits.mplot3d.art3d import Poly3DCollection


    n_angles = 80

    n_radii = 20


    # An array of radii

    # Does not include radius r=0, this is to eliminate duplicate points

    radii = np.linspace(0.0, 0.5, n_radii)


    # An array of angles

    angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)


    # Repeat all angles for each radius

    angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)


    # Convert polar (radii, angles) coords to cartesian (x, y) coords

    # (0, 0) is added here. There are no duplicate points in the (x, y) plane


    x = np.append(0, (radii*np.cos(angles)).flatten())

    y = np.append(0, (radii*np.sin(angles)).flatten())


    # Pringle surface

    z = 1+-np.sqrt(x**2+y**2)*2


    print(x.shape, y.shape, angles.shape, radii.shape, z.shape)

    # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
    tri = Triangulation(x, y)

    triangle_vertices = np.array([np.array([[x[T[0]], y[T[0]], z[T[0]]],

    [x[T[1]], y[T[1]], z[T[1]]],

    [x[T[2]], y[T[2]], z[T[2]]]]) for T in tri.triangles])


    x2 = np.append(0, (radii*np.cos(angles)).flatten())

    y2 = np.append(0, (radii*np.sin(angles)).flatten())


    # Pringle surface
    z2 = -1+np.sqrt(x**2+y**2)*2


    # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
    tri2 = Triangulation(x2, y2)

    triangle_vertices2 = np.array([np.array([[x2[T[0]], y2[T[0]], z2[T[0]]],

    [x2[T[1]], y2[T[1]], z2[T[1]]],

    [x2[T[2]], y2[T[2]], z2[T[2]]]]) for T in tri2.triangles])

    triangle_vertices = np.concatenate([triangle_vertices, triangle_vertices2])

    midpoints = np.average(triangle_vertices, axis=1)


    def find_color_for_point(pt):

    c_x, c_y, c_z = pt

    angle = np.arctan2(c_x, c_y)*180/np.pi

    if (angle < 0):
    angle = angle + 360

    if c_z < 0:

    l = 0.5 - abs(c_z)/2
    #l=0
    if c_z == 0:
    l = 0.5
    if c_z > 0:
    l = (1 - (1-c_z)/2)

    if c_z > 0.97:

    l = (1 - (1-c_z)/2)

    col = colorsys.hls_to_rgb(angle/360, l, 1)

    return col


    facecolors = [find_color_for_point(pt) for pt in midpoints] # smooth gradient
    # facecolors = [np.random.random(3) for pt in midpoints] # random colors


    coll = Poly3DCollection(
    triangle_vertices, facecolors=facecolors, edgecolors=None)


    fig = plt.figure()

    ax = fig.gca(projection='3d')

    ax.add_collection(coll)

    ax.set_xlim(-1, 1)

    ax.set_ylim(-1, 1)

    ax.set_zlim(-1, 1)

    ax.elev = 50


    plt.show()





    share|improve this answer



























      0














      i have found a solution, maybe it will be usefull for others.



      from mpl_toolkits.mplot3d import Axes3D

      from matplotlib import cm

      import matplotlib.pyplot as plt

      import numpy as np
      import colorsys


      from matplotlib.tri import Triangulation

      from mpl_toolkits.mplot3d.art3d import Poly3DCollection


      n_angles = 80

      n_radii = 20


      # An array of radii

      # Does not include radius r=0, this is to eliminate duplicate points

      radii = np.linspace(0.0, 0.5, n_radii)


      # An array of angles

      angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)


      # Repeat all angles for each radius

      angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)


      # Convert polar (radii, angles) coords to cartesian (x, y) coords

      # (0, 0) is added here. There are no duplicate points in the (x, y) plane


      x = np.append(0, (radii*np.cos(angles)).flatten())

      y = np.append(0, (radii*np.sin(angles)).flatten())


      # Pringle surface

      z = 1+-np.sqrt(x**2+y**2)*2


      print(x.shape, y.shape, angles.shape, radii.shape, z.shape)

      # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
      tri = Triangulation(x, y)

      triangle_vertices = np.array([np.array([[x[T[0]], y[T[0]], z[T[0]]],

      [x[T[1]], y[T[1]], z[T[1]]],

      [x[T[2]], y[T[2]], z[T[2]]]]) for T in tri.triangles])


      x2 = np.append(0, (radii*np.cos(angles)).flatten())

      y2 = np.append(0, (radii*np.sin(angles)).flatten())


      # Pringle surface
      z2 = -1+np.sqrt(x**2+y**2)*2


      # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
      tri2 = Triangulation(x2, y2)

      triangle_vertices2 = np.array([np.array([[x2[T[0]], y2[T[0]], z2[T[0]]],

      [x2[T[1]], y2[T[1]], z2[T[1]]],

      [x2[T[2]], y2[T[2]], z2[T[2]]]]) for T in tri2.triangles])

      triangle_vertices = np.concatenate([triangle_vertices, triangle_vertices2])

      midpoints = np.average(triangle_vertices, axis=1)


      def find_color_for_point(pt):

      c_x, c_y, c_z = pt

      angle = np.arctan2(c_x, c_y)*180/np.pi

      if (angle < 0):
      angle = angle + 360

      if c_z < 0:

      l = 0.5 - abs(c_z)/2
      #l=0
      if c_z == 0:
      l = 0.5
      if c_z > 0:
      l = (1 - (1-c_z)/2)

      if c_z > 0.97:

      l = (1 - (1-c_z)/2)

      col = colorsys.hls_to_rgb(angle/360, l, 1)

      return col


      facecolors = [find_color_for_point(pt) for pt in midpoints] # smooth gradient
      # facecolors = [np.random.random(3) for pt in midpoints] # random colors


      coll = Poly3DCollection(
      triangle_vertices, facecolors=facecolors, edgecolors=None)


      fig = plt.figure()

      ax = fig.gca(projection='3d')

      ax.add_collection(coll)

      ax.set_xlim(-1, 1)

      ax.set_ylim(-1, 1)

      ax.set_zlim(-1, 1)

      ax.elev = 50


      plt.show()





      share|improve this answer

























        0












        0








        0







        i have found a solution, maybe it will be usefull for others.



        from mpl_toolkits.mplot3d import Axes3D

        from matplotlib import cm

        import matplotlib.pyplot as plt

        import numpy as np
        import colorsys


        from matplotlib.tri import Triangulation

        from mpl_toolkits.mplot3d.art3d import Poly3DCollection


        n_angles = 80

        n_radii = 20


        # An array of radii

        # Does not include radius r=0, this is to eliminate duplicate points

        radii = np.linspace(0.0, 0.5, n_radii)


        # An array of angles

        angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)


        # Repeat all angles for each radius

        angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)


        # Convert polar (radii, angles) coords to cartesian (x, y) coords

        # (0, 0) is added here. There are no duplicate points in the (x, y) plane


        x = np.append(0, (radii*np.cos(angles)).flatten())

        y = np.append(0, (radii*np.sin(angles)).flatten())


        # Pringle surface

        z = 1+-np.sqrt(x**2+y**2)*2


        print(x.shape, y.shape, angles.shape, radii.shape, z.shape)

        # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
        tri = Triangulation(x, y)

        triangle_vertices = np.array([np.array([[x[T[0]], y[T[0]], z[T[0]]],

        [x[T[1]], y[T[1]], z[T[1]]],

        [x[T[2]], y[T[2]], z[T[2]]]]) for T in tri.triangles])


        x2 = np.append(0, (radii*np.cos(angles)).flatten())

        y2 = np.append(0, (radii*np.sin(angles)).flatten())


        # Pringle surface
        z2 = -1+np.sqrt(x**2+y**2)*2


        # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
        tri2 = Triangulation(x2, y2)

        triangle_vertices2 = np.array([np.array([[x2[T[0]], y2[T[0]], z2[T[0]]],

        [x2[T[1]], y2[T[1]], z2[T[1]]],

        [x2[T[2]], y2[T[2]], z2[T[2]]]]) for T in tri2.triangles])

        triangle_vertices = np.concatenate([triangle_vertices, triangle_vertices2])

        midpoints = np.average(triangle_vertices, axis=1)


        def find_color_for_point(pt):

        c_x, c_y, c_z = pt

        angle = np.arctan2(c_x, c_y)*180/np.pi

        if (angle < 0):
        angle = angle + 360

        if c_z < 0:

        l = 0.5 - abs(c_z)/2
        #l=0
        if c_z == 0:
        l = 0.5
        if c_z > 0:
        l = (1 - (1-c_z)/2)

        if c_z > 0.97:

        l = (1 - (1-c_z)/2)

        col = colorsys.hls_to_rgb(angle/360, l, 1)

        return col


        facecolors = [find_color_for_point(pt) for pt in midpoints] # smooth gradient
        # facecolors = [np.random.random(3) for pt in midpoints] # random colors


        coll = Poly3DCollection(
        triangle_vertices, facecolors=facecolors, edgecolors=None)


        fig = plt.figure()

        ax = fig.gca(projection='3d')

        ax.add_collection(coll)

        ax.set_xlim(-1, 1)

        ax.set_ylim(-1, 1)

        ax.set_zlim(-1, 1)

        ax.elev = 50


        plt.show()





        share|improve this answer













        i have found a solution, maybe it will be usefull for others.



        from mpl_toolkits.mplot3d import Axes3D

        from matplotlib import cm

        import matplotlib.pyplot as plt

        import numpy as np
        import colorsys


        from matplotlib.tri import Triangulation

        from mpl_toolkits.mplot3d.art3d import Poly3DCollection


        n_angles = 80

        n_radii = 20


        # An array of radii

        # Does not include radius r=0, this is to eliminate duplicate points

        radii = np.linspace(0.0, 0.5, n_radii)


        # An array of angles

        angles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)


        # Repeat all angles for each radius

        angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)


        # Convert polar (radii, angles) coords to cartesian (x, y) coords

        # (0, 0) is added here. There are no duplicate points in the (x, y) plane


        x = np.append(0, (radii*np.cos(angles)).flatten())

        y = np.append(0, (radii*np.sin(angles)).flatten())


        # Pringle surface

        z = 1+-np.sqrt(x**2+y**2)*2


        print(x.shape, y.shape, angles.shape, radii.shape, z.shape)

        # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
        tri = Triangulation(x, y)

        triangle_vertices = np.array([np.array([[x[T[0]], y[T[0]], z[T[0]]],

        [x[T[1]], y[T[1]], z[T[1]]],

        [x[T[2]], y[T[2]], z[T[2]]]]) for T in tri.triangles])


        x2 = np.append(0, (radii*np.cos(angles)).flatten())

        y2 = np.append(0, (radii*np.sin(angles)).flatten())


        # Pringle surface
        z2 = -1+np.sqrt(x**2+y**2)*2


        # NOTE: This assumes that there is a nice projection of the surface into the x/y-plane!
        tri2 = Triangulation(x2, y2)

        triangle_vertices2 = np.array([np.array([[x2[T[0]], y2[T[0]], z2[T[0]]],

        [x2[T[1]], y2[T[1]], z2[T[1]]],

        [x2[T[2]], y2[T[2]], z2[T[2]]]]) for T in tri2.triangles])

        triangle_vertices = np.concatenate([triangle_vertices, triangle_vertices2])

        midpoints = np.average(triangle_vertices, axis=1)


        def find_color_for_point(pt):

        c_x, c_y, c_z = pt

        angle = np.arctan2(c_x, c_y)*180/np.pi

        if (angle < 0):
        angle = angle + 360

        if c_z < 0:

        l = 0.5 - abs(c_z)/2
        #l=0
        if c_z == 0:
        l = 0.5
        if c_z > 0:
        l = (1 - (1-c_z)/2)

        if c_z > 0.97:

        l = (1 - (1-c_z)/2)

        col = colorsys.hls_to_rgb(angle/360, l, 1)

        return col


        facecolors = [find_color_for_point(pt) for pt in midpoints] # smooth gradient
        # facecolors = [np.random.random(3) for pt in midpoints] # random colors


        coll = Poly3DCollection(
        triangle_vertices, facecolors=facecolors, edgecolors=None)


        fig = plt.figure()

        ax = fig.gca(projection='3d')

        ax.add_collection(coll)

        ax.set_xlim(-1, 1)

        ax.set_ylim(-1, 1)

        ax.set_zlim(-1, 1)

        ax.elev = 50


        plt.show()






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 22 at 12:40









        kkingkking

        11




        11





























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55298164%2f3d-plot-of-the-cone-using-matplotlib%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

            Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

            Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript