{"id":14372,"date":"2015-07-21T15:13:29","date_gmt":"2015-07-21T20:13:29","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/ccpg1001\/?p=12628"},"modified":"2026-04-04T11:39:16","modified_gmt":"2026-04-04T16:39:16","slug":"graficas-3d-en-python","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/fp-u08\/graficas-3d-en-python\/","title":{"rendered":"8.6 Gr\u00e1ficas 3D en Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><strong><em>Gr\u00e1ficas 3D<\/em><\/strong>:<\/p>\n\n\n\n<p><a href=\"#planos\">planos<\/a><\/p>\n\n\n\n<p><a href=\"#wireframe\">wireframe<\/a><\/p>\n\n\n\n<p><a href=\"#scatter\">scatter<\/a><\/p>\n\n\n\n<p><a href=\"#solidorevolucion\">s\u00f3lido revoluci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"planos\">1.&nbsp;Gr\u00e1ficas 3D en Python. Sistema de ecuaciones y Planos<\/h2>\n\n\n\n<p>El ejercicio se presenta desde la perspectiva que la soluci\u00f3n es un <em><strong>punto de intersecci\u00f3n de los planos en el espacio<\/strong><\/em> dados por cada ecuaci\u00f3n. Ejercicio de m\u00e9todos num\u00e9ricos.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Sistemas de Ecuaciones y Planos 3D con Python - M\u00e9todos Num\u00e9ricos\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/47Ok98AhUMI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><em><strong>Ejercicio<\/strong><\/em>: M\u00e9todos num\u00e9ricos en sistema de ecuaciones<br><a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-unidades\/mn-u03\/sistema-ecuaciones-planos-3d\/\" data-type=\"post\" data-id=\"2852\">Sistema de ecuaciones 3\u00d73, planos 3D con Python<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><strong><em>Gr\u00e1ficas 3D<\/em><\/strong>:<\/p>\n\n\n\n<p><a href=\"#planos\">planos<\/a><\/p>\n\n\n\n<p><a href=\"#wireframe\">wireframe<\/a><\/p>\n\n\n\n<p><a href=\"#scatter\">scatter<\/a><\/p>\n\n\n\n<p><a href=\"#solidorevolucion\">s\u00f3lido revoluci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wireframe\">2. Gr\u00e1ficas 3D malla \/ wireframe<\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"447\" height=\"387\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/2evaiit2017t2_islavolumen.png\" alt=\"2evaiit2017t2 isla volumen\" class=\"wp-image-16174\" \/><\/figure>\n\n\n\n<p><strong>Referencia<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-eval\/mn-2e15\/2eva2011tii_t1_mn-volumen-de-lago\/\" data-type=\"post\" data-id=\"837\">2Eva2011TII_T1_MN Volumen de lago<\/a><\/p>\n\n\n\n<p>Usada cuando se tienen muestras de puntos f(x,y) y se dan los valores en cada eje x y eje y.<\/p>\n\n\n\n<p>Ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>isla = np.array(&#091;&#091;0,1,0,0,0],\n                 &#091;1,3,1,1,0],\n                 &#091;5,4,3,2,0],\n                 &#091;0,0,1,1,0]])\n\nxi = np.array(&#091;0,100,200,300,400])\nyi = np.array(&#091;0, 50,100,150])<\/code><\/pre>\n\n\n\n<p>la gr\u00e1fica requiere importar las librer\u00edas en 3D<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; gutter: false; title: ; notranslate\" title=\"\">\nimport numpy as np\nimport matplotlib.pyplot as plt\n<\/pre><\/div>\n\n\n<p>crea las matrices de puntos de referencia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>X, Y = np.meshgrid(xi, yi)<\/code><\/pre>\n\n\n\n<p>crea la gr\u00e1fica en una figura con proyecci\u00f3n 3D<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>figura = plt.figure()\ngrafica = figura.add_subplot(111, projection = '3d')\ngrafica.plot_wireframe(X,Y,isla)\nplt.show()<\/code><\/pre>\n\n\n\n<p>con lo que obtiene:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"447\" height=\"387\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/2evaiit2017t2_islavolumen.png\" alt=\"2evaiit2017t2 isla volumen\" class=\"wp-image-16174\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><strong><em>Gr\u00e1ficas 3D<\/em><\/strong>:<\/p>\n\n\n\n<p><a href=\"#planos\">planos<\/a><\/p>\n\n\n\n<p><a href=\"#wireframe\">wireframe<\/a><\/p>\n\n\n\n<p><a href=\"#scatter\">scatter<\/a><\/p>\n\n\n\n<p><a href=\"#solidorevolucion\">s\u00f3lido revoluci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"scatter\">3. Gr\u00e1ficas 3D puntos dispersos \/ scatter<\/h2>\n\n\n\n<p>Varios puntos en el espacio para graficar, los puntos se ordenan por filas. Cada fila contiene las coordenadas [x, y, z] de cada punto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>puntos = np.array(&#091;&#091;x0, y0, z0],\n                   &#091;x1, y1, z1],\n                   &#091;x2, y2, z3]])<\/code><\/pre>\n\n\n\n<p>Se usa un vector para cada coordenada xi, yi, zi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xi = &#091;x0, x1, x2]\nyi = &#091;y0, y1, y2]\nzi = &#091;z0, z1, z2]<\/code><\/pre>\n\n\n\n<p>con lo que se crea la gr\u00e1fica de puntos (scatter) en 3d:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"454\" height=\"371\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/puntosdispersion.png\" alt=\"puntos dispersi\u00f3n 3D gr\u00e1fica Python\" class=\"wp-image-16173\" \/><\/figure>\n\n\n\n<p>las instrucciones en Python son:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Puntos en el espacio, Dispersi\u00f3n-Scatter\n# cada fila representa un punto &#x5B;xi,yi,zi]\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# INGRESO\n# unpunto = &#x5B;x,y,z]\npuntos = np.array(&#x5B;&#x5B;0, 0, 0],\n                   &#x5B;1, 2, 3],\n                   &#x5B;2, 4,-1]])\n\n# SALIDA\n# grafica\nfigura = plt.figure()\ngraf3D = figura.add_subplot(111,projection = '3d')\n\n# xi = &#x5B;:,0] ; yi = &#x5B;:,1], zi = &#x5B;:,2]\n# selecciona columnas, use la transpuesta de puntos\n&#x5B;xi, yi , zi] = np.transpose(puntos)\n\ngraf3D.scatter(xi,yi,zi,\n                c = 'blue',\n                marker='o',\n                label = 'puntos&#x5B;i]')\ngraf3D.set_title('puntos, dispersi\u00f3n-scatter')\ngraf3D.set_xlabel('eje x')\ngraf3D.set_ylabel('eje y')\ngraf3D.set_zlabel('eje z')\ngraf3D.legend()\nplt.show()\n<\/pre><\/div>\n\n\n<p>siguiendo el esquema, se pueden a\u00f1adir los puntos que sean necesarios.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><strong><em>Gr\u00e1ficas 3D<\/em><\/strong>:<\/p>\n\n\n\n<p><a href=\"#planos\">planos<\/a><\/p>\n\n\n\n<p><a href=\"#wireframe\">wireframe<\/a><\/p>\n\n\n\n<p><a href=\"#scatter\">scatter<\/a><\/p>\n\n\n\n<p><a href=\"#solidorevolucion\">s\u00f3lido revoluci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"solidorevolucion\">4. Gr\u00e1ficas 3D s\u00f3lidos de revoluci\u00f3n<\/h2>\n\n\n\n<p><em><strong>Referencia<\/strong><\/em>:&nbsp; <em><strong>m\u00e9todos num\u00e9ricos<\/strong><\/em>, para la unidad de integraci\u00f3n num\u00e9rica: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-eval\/mn-2e25\/2eva2023paoii_t1-volumen-por-solido-de-revolucion\/\" data-type=\"post\" data-id=\"9132\">2Eva2023PAOII_T1 Volumen por solido de revoluci\u00f3n<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"442\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/areaSolidoRevolucion01.png\" alt=\"\u00e1rea S\u00f3lido Revoluci\u00f3n \" class=\"wp-image-16171\" \/><\/figure>\n\n\n\n<p>El ejercicio se presenta desde la perspectiva que un <em><strong>s\u00f3lido que se genera al rotar un \u00e1rea<\/strong><\/em> que se encuentra entre f(x) y el eje x.&nbsp;<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> f(x) = \\sqrt{\\sin (x\/2)} <\/span>\n\n\n\n<p>El volumen del s\u00f3lido de revoluci\u00f3n se puede encontrar usando el integral<\/p>\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> V = \\int_{a}^{b} \\pi (f(x))^2 dx <\/span>\n\n\n\n<p>La gr\u00e1fica del volumen de rotaci\u00f3n se representa como: <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"808\" height=\"735\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/areaSolidoRevolucion02.png\" alt=\"volumen S\u00f3lido Revoluci\u00f3n \" class=\"wp-image-16172\" \/><\/figure>\n\n\n\n<p>Se usa una figura(ventana) con&nbsp; una gr\u00e1fica para 2D y otra figura para 3D<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Instrucciones en Python<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# 2Eva_2023PAOII_T1 Volumen por solido de revoluci\u00f3n\n# https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-evalua\/mn-2e25\/2eva2023paoii_t1-volumen-solido-revolucion\/\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# INGRESO\nf = lambda x: np.sqrt(np.sin(x\/2))\n\n# eje x\nxa = 0.1\nxb = 1.8\nxmuestras = 31\n# angulo w de rotaci\u00f3n\nw_a = 0\nw_b = 2*np.pi\nw_muestras = 31\n\n# PROCEDIMIENTO\n# muestras en x\nxi = np.linspace(xa, xb, xmuestras)\n\n# grafica 2D para el area de corte en eje y,x\nfi = f(xi)\nf0 = np.zeros(xmuestras,dtype=float)\n\n# grafica 3D muestras en x y angulo w\nwi = np.linspace(w_a, w_b, w_muestras)\nX, W = np.meshgrid(xi, wi)\n# proyeccion en cada eje \nYf = f(xi)*np.cos(W)\nZf = f(xi)*np.sin(W)\n\n# SALIDA\n# grafica 2D\nfig2D = plt.figure()\ngraf2D = fig2D.add_subplot(111)\ngraf2D.plot(xi,fi,color='blue',label='f(x)')\ngraf2D.fill_between(xi,fi,f0,color='lightblue')\ngraf2D.grid()\ngraf2D.set_title('Area para s\u00f3lido de revoluci\u00f3n')\ngraf2D.set_xlabel('x')\ngraf2D.set_ylabel('f(x)')\n\n# grafica 3D\nfig3D = plt.figure()\ngraf3D = fig3D.add_subplot(111, projection='3d')\n\ngraf3D.plot_surface(X, Yf, Zf,\n                    color='blue', label='f(x)',\n                    alpha=0.6, rstride=6, cstride=12)\n\ngraf3D.set_title('S\u00f3lido de revoluci\u00f3n')\ngraf3D.set_xlabel('x')\ngraf3D.set_ylabel('y')\ngraf3D.set_zlabel('z')\n# grafica.legend()\neleva = 30\nrota = -45\ndeltaw = 5\ngraf3D.view_init(eleva, rota)\n\n# rotacion de ejes\nfor angulo in range(rota, 360+rota, deltaw ):\n    graf3D.view_init(eleva, angulo)\n    plt.draw()\n    plt.pause(.001)\nplt.show()\n<\/pre><\/div>\n\n\n<p><em><strong>Referencia<\/strong><\/em>: <span class=\"mw-page-title-main\">S\u00f3lido de revoluci\u00f3n. Wikipedia. <a href=\"https:\/\/es.wikipedia.org\/wiki\/S%C3%B3lido_de_revoluci%C3%B3n\">https:\/\/es.wikipedia.org\/wiki\/S%C3%B3lido_de_revoluci%C3%B3n<\/a><\/span><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group has-medium-font-size is-layout-flex wp-block-group-is-layout-flex\">\n<p><strong><em>Gr\u00e1ficas 3D<\/em><\/strong>:<\/p>\n\n\n\n<p><a href=\"#planos\">planos<\/a><\/p>\n\n\n\n<p><a href=\"#wireframe\">wireframe<\/a><\/p>\n\n\n\n<p><a href=\"#scatter\">scatter<\/a><\/p>\n\n\n\n<p><a href=\"#solidorevolucion\">s\u00f3lido revoluci\u00f3n<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gr\u00e1ficas 3D: planos wireframe scatter s\u00f3lido revoluci\u00f3n 1.&nbsp;Gr\u00e1ficas 3D en Python. Sistema de ecuaciones y Planos El ejercicio se presenta desde la perspectiva que la soluci\u00f3n es un punto de intersecci\u00f3n de los planos en el espacio dados por cada ecuaci\u00f3n. Ejercicio de m\u00e9todos num\u00e9ricos. Ejercicio: M\u00e9todos num\u00e9ricos en sistema de ecuacionesSistema de ecuaciones 3\u00d73, [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"wp-custom-template-entrada-fp-unidades","format":"standard","meta":{"footnotes":""},"categories":[109],"tags":[],"class_list":["post-14372","post","type-post","status-publish","format-standard","hentry","category-fp-u08"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/14372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=14372"}],"version-history":[{"count":10,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/14372\/revisions"}],"predecessor-version":[{"id":23282,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/14372\/revisions\/23282"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=14372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=14372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=14372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}