martes, 30 de agosto de 2011

Cómo graficar una función de una variable con Python



Esta pequeña publicación es un aperitivo para una sucesión de publicaciones en donde desarrollaré todos los métodos de graficación en Python, tanto 2D como 3D y algunas alternativas para dimensiones mayores.

Observación: Debes tener instalado matplotlib. Si tienes dudas sobre como instalarlo, puedes dejar un comentario, sin embargo, si eres un usuario de Debian (Ubuntu, Linux Mint, etc) o distribuciones parecidas, puedes buscarlo en synaptic o usar apt-get.

El código en cuestión es:
import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,10,0.1)
y=2*np.sin(4*x)-x**2+10*x  #f(x)=2sin(4x)-x^2+10x
plt.plot(x,y)
plt.show()

Puedes usar la librería math en lugar de numpy para utilizar la función seno, y en general para cualquier otra función, con lo que el código sería:

import math
import matplotlib.pyplot as plt
import numpy as np
x=np.arange(0,10,0.1)
y=2*math.sin(4*x)-x**2+10*x  #f(x)=2sin(4x)-x^2+10x
plt.plot(x,y)
plt.show()

Finalmente el resultado es:


Nota final: Preferí colocar una función mas interesante que la eterna parábola que aparece en todo manual de graficación. Te invito a jugar con este código simple, seguro lograrás hacer cosas mejores.

Si te ha gustado este artículo, coméntalo, si quieres mas información, pídela. Tu tienes completo control sobre los contenidos de este blog.

26 comentarios:

  1. me gustaria q me dieras algun link para descargar matplotlib y que me explicaras como instalarlo paso a paso en windows, por favor me seria de muchisima ayuda para los proyectos de la universidad.

    ResponderEliminar
  2. Lo mejor que puedes hacer es instalar pythonxy, que es una distribución de python equipada con matplotlib, numpy, scipy y muchas otras herramientas que te interesarán.

    http://code.google.com/p/pythonxy/

    Su IDE Spyder es muy bueno, sobre todo para aprender.

    Sino, puedes encontrar un repositorio de librerías de Python para Windows en http://www.lfd.uci.edu/~gohlke/pythonlibs/ todas con instalador.

    Finalmente, nada mejor que pip-python, pues esta herramienta te permite instalar cualquier paquete fácilmente con una simple linea de comandos.

    Saludos y espero que te sirva la información.

    ResponderEliminar
  3. Hombre gracias por el código de verdad gracias pero eeeh lo podrías explicar linea por linea es que tengo dificultades para meter una función diferente.Que pena ser tan letardo jejejeje ;)

    ResponderEliminar
  4. Lo explico linea por linea:

    1) Importamos la librería de numpy, pues de aquí podemos extraer funciones como seno, coseno, logaritmo, etc.

    import numpy as np

    2) Importamos la librería de graficación matplotlib:

    import matplotlib.pyplot as plt

    3) Creamos el dominio de la función, es decir, el conjunto de puntos que queremos evaluar en la función. np.arange(a,b,paso) crea el intervalo desde el número a hasta b, con un paso (puedes pensarlo como precisión) de 0.1. Observar que este será una lista.

    x=np.arange(0,10,0.1)

    4) creamos ahora el rango o el conjunto de las imágenes, evaluando la lista de puntos x en nuestra función, y=2sin(4x)-x^2+10x;

    y=2*np.sin(4*x)-x**2+10*x #f(x)=2sin(4x)-x^2+10x

    5) Graficamos la función,

    plt.plot(x,y)

    6) La mostramos en pantalla:

    plt.show()

    ResponderEliminar
  5. Uso Ubuntu, he intentado descargar la librería de diferentes formas, pero me aparece el siguiente error:

    W: Failed to fetch http://co.archive.ubuntu.com/ubuntu/pool/universe/p/python-tz/python-tz_2010b-1ubuntu0.11.04.1_all.deb
    404 Not Found

    No he podido descargar la librería y lo he intentado de diversas fomas, quisiera saber si ¿podrías ayudarme a saber que pasa o qué hacer? Gracias.

    ResponderEliminar
  6. instale python-matplotlib y creo el archivo *.py ejecuto y nada mi cursor se vuelve diferente y nada mas alguna opinion de que pasa

    ResponderEliminar
  7. Hola, qué versión de python es??
    yo tengo la 3.2.

    ResponderEliminar
  8. aqui hice un código interesante

    import numpy as np
    import matplotlib.pyplot as plt

    x=np.arange(-4.5,4.5,0.05)
    y= np.sqrt(1-(pow((abs(x)-1),2)))
    y1= np.arccos(1-abs(x))-np.pi
    plt.plot(x,y)
    plt.plot(x,y1)
    plt.show()

    ResponderEliminar
  9. cuando pongo el codigo, no me tira la grafica, me tira este error:
    ImportError: matplotlib requires pyparsing.

    Estoy utilizando el IDE Spider 2.7

    ResponderEliminar
  10. hola capo
    quisiera q me ubiques paso a paso la instalacion ...y su uso..
    quiero ..realizar funcion de circulo, medio y cuarto de circulo..
    para hacer q una imagen....un sprite ..recorra ESE trazo.. entiendo de trigonometria pero ando trabado en la implementacion...
    me vendria bien la ayuda

    ResponderEliminar
  11. hola capo
    quisiera q me ubiques paso a paso la instalacion ...y su uso..
    quiero ..realizar funcion de circulo, medio y cuarto de circulo..
    para hacer q una imagen....un sprite ..recorra ESE trazo.. entiendo de trigonometria pero ando trabado en la implementacion...
    me vendria bien la ayuda

    ResponderEliminar
  12. Ayuda, tengo problemas con la librería y no se como instalarla, la "descargue" (según yo) pero no se como instalarla o en que parte de la raíz va el archivo...

    Traceback (most recent call last):
    File "Untitled", line 2
    import matplotlib.pyplot as plt
    ImportError: No module named matplotlib.pyplot

    ResponderEliminar
    Respuestas
    1. no está instalada. Debes instalarla usando easy_install o pip

      Eliminar
    2. ya encontraron la solución?!

      Eliminar
  13. alguien puede ayudarme a graficar esta funcion porfavor??
    e^t * sen t

    ResponderEliminar
    Respuestas
    1. para invocar la función exponencial debes cargar la librería math

      así tu función se leería math.exp(t)*math.sin(t)

      toma el código de arriba como referencia, solo que en lugar de x tendrás t.

      Eliminar
  14. Hola, en este link pueden descargar una guía paso a paso para instalar matplotlib, el numpy, etc. Eso si, es para python 3.4 y es mejor desinstalar la versión que tengan en la PC porque pueden presentarse conflictos. Está en inglés, pero no es un lenguaje tan complicado y tiene figuras.

    En la página buscan la sección que dice: "Windows Installation Guide and Installers" .En esa parte está la guía para verla en word o pdf. Pura Vida!

    Link: http://web.cs.wpi.edu/~cs1004/a14/Resources/

    ResponderEliminar
  15. Muchas gracias por este aporte me sirvio de mucho, muy resumido en pocas lineas de codigo.
    Ahora si no te molesta, solo necesito una cosa y no soy muy experimentado en Python, necesito ingresar las variables por pantalla como lo haria?

    ResponderEliminar
    Respuestas
    1. ¿Que el usuario ingrese datos, la función o puntos?

      Eliminar
  16. Muy buen post, la verdad me ayudó demasiado.

    ResponderEliminar
  17. ¿Alguien podría ayudarme a hacer una gráfica con la función seno?

    ResponderEliminar
    Respuestas
    1. Se grafica precisamente una función seno en este tutorial.

      Eliminar
  18. aqui les dejo este de barras



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


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

    xpos = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,16]
    ypos = [2,3,4,5,1,6,2,1,7,2,3,5,1,3,2]
    num_elements = len(xpos)
    zpos = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
    dx = 1
    dy =1
    dz = [20,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

    ax1.bar3d(xpos, ypos, zpos, dx, dy, dz, color='Skyblue')
    plt.show()

    ResponderEliminar