JSM_gráficos

1618 days ago by pjimenez

Pedro Martín

Algunos enlaces:
http://www.sagemath.org/doc/reference/sage/plot/plot.html

http://www.sagemath.org/doc/reference/plot3d/index.html

http://wiki.sagemath.org/interact/graphics#Plot_Coloring

http://matplotlib.org/index.html

 

1. Representación de funciones de una variable.


Con Sage podemos representar una función de una variable:

 

La función Plot en SAGE obedece la siguiente sintaxis:
plot(f, xmin, xmax, options)

 

 

 

O bien esta otra sintaxis:
plot(f, (variable, xmin, xmax), opciones)

 

plot(cos(x^2),-5,5) #Representación de una función 
       

Podemos guardar el gráfico en un fichero pdf (también es posible guardarlo como imagen con formato png pinchando en el gráfico y seleccionando "guardar como..."

plot(cos(x^2),-5,5).save("dibujo.pdf") #Para guardar el gráfico en un fichero pdf. 
       

Se puede modificar el grosor de la gráfica:

plot(cos(x^2),-5,5,thickness=4) #La misma gráfica modificando el grosor 
       

También se puede modificar el color, usando una terna RGB, de números entre 0 y 1, o una cadena de caracteres, por ejemplo 'red'

plot(cos(x^2),-5,5,rgbcolor="red") #La misma gráfica modificando el color 
       
plot(cos(x^2),-5,5,rgbcolor=(1,0.5,0)) #La misma gráfica modificando el color 
       
plot(x * sin(1/x), (x, -2, 2), color='red',plot_points=500) #modificando el color y el número de puntos 
       

También podemos limitar el área de nuestra gráfica, dando los valores mínimo  y máximos del eje Y

plot(1/x,(x,-2,2), ymin=-50,ymax=50, color='#600bff') 
       

Rellenando la gráfica:


plot(sin(x^3),-3,3, fill='axis') # Una gráfica rellenado el espacio entre la función y los ejes 
       

Otras opciones de relleno:

p1 = plot(sin(x), -pi, pi, fill = 'axis') p2 = plot(sin(x), -pi, pi, fill = 'min') p3 = plot(sin(x), -pi, pi, fill = 'max') p4 = plot(sin(x), -pi, pi, fill = 0.5) graphics_array([[p1, p2], [p3, p4]]).show(frame=True, axes=False) 
       

También es posible representar dos o más funciones simultáneamente:

Vamos a dibujar la función $e^x$ junto con su desarrollo de Taylor de grado 4 en $x=0$

f(x)=taylor(e^x, x, 0, 3) print f(x) plot(e^x,(x,-3,3), color='red')+plot(f(x),(x,-3,3)) 
       
1/6*x^3 + 1/2*x^2 + x + 1
1/6*x^3 + 1/2*x^2 + x + 1
plot(cos(x^2),-2,2)+plot(sin(x^3),-2,2,rgbcolor=(1,0,0)) #Dos funciones representadas conjuntamente 
       

Y rellenar el espacio entre las gráficas:

plot(cos(x^2),-2,2)+plot(sin(x^3),-2,2,fill=cos(x^2),fillcolor='green') #gráfica del área definida por dos funciones 
       

Podemos dibujar varias gráficas en una tabla. Cada una de ellas puede ser a su vez una suma de gráficas, etc.

G = [plot((sin(t*x))) for t in xrange(0,9*pi,pi)] # una lista de gráficas graphics_array(G,2,5).show() # las dibujamos en una tabla 
       

Si tenemos una lista de puntos (x,y), podemos representarlos con el comando points:

puntos = [(a,sin(a)) for a in range(10)] #generamos los puntos puntos 
       
[(0, 0), (1, sin(1)), (2, sin(2)), (3, sin(3)), (4, sin(4)), (5,
sin(5)), (6, sin(6)), (7, sin(7)), (8, sin(8)), (9, sin(9))]
[(0, 0), (1, sin(1)), (2, sin(2)), (3, sin(3)), (4, sin(4)), (5, sin(5)), (6, sin(6)), (7, sin(7)), (8, sin(8)), (9, sin(9))]
points(puntos,color='red', pointsize=80) 
       

Podemos ajustar dichos puntos por ejemplo mediante splines:

interpolation = spline(puntos) plot(interpolation,(0,9)) + points(puntos,color='red', pointsize=80) 
       

2. Representación de curvas en el plano.

Es posible representar una curva en paramétricas en dimensión 2:

la instrucción es parametric_plot((f(t), g(t)), (t, a, b)) donde [a,b] es el intervalo que recorre el parámetro

!Atención! Si se usa otra variable distinta de x, hay que definirla como tal en la hoja de trabajo.

var('t');parametric_plot((3*cos(t),sin(t)),(t,0, 2*pi)) #Una curva 2d en paramétricas. 
       
t
t

Existen opciones para ocultar los ejes, enmarcar la gráfica, etc.:

parametric_plot((3*cos(t),sin(t)),(t,0, 2*pi)).show(aspect_ratio=2, frame=true, axes=false) #Una curva 2d en paramétricas con modificaciones de escala en ejes y sin mostrar los ejes 
       

Es posible representar una curva definida de forma implícita en dimensión 2:

var('y');implicit_plot(x^2+y^2==1,(x,-2,2),(y,-2,2)) #Gráfica de una curva definida de forma implícita en 2d 
       
y
y

Podemos salvar nuestro dibujo también con la extensión .eps o .pdf:

implicit_plot(x^2+y^2==1,(x,-2,2),(y,-2,2)).save("dibujo2.pdf") #La gráfica anterior salvada en un fichero eps 
       

Podemos interactuar con las curvas, por ejemplo visualizando la variación del parámetro

var('t') r=(2*cos(t), sin(t)) tbounds=(0, 2*pi) tmin,tmax=tbounds @interact def myplot(tt=slider(tmin.n(), tmax.n(),default=((tmin+tmax)/2).n())): p=parametric_plot(r, (t, tmin, tmax),alpha=0.5) background=parametric_plot(r, (t, tmin, tt),thickness=3) show(p+background) 
       
tt 

Click to the left again to hide and once more to show the dynamic interactive window

3. Gráficas en dimensión 3

Se puede representar una curva en paramétricas en dimensión 3:

var('t');parametric_plot((3*cos(t),sin(t),t),(t,0, 4*pi)) #Una curva 3d en paramétricas 
       
t
t
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Para representar una función de dos variables:

var('y');plot3d(4*x*exp(-x^2-y^2),(x,-2,2),(y,-2,2)) #Gráfica de una función de dos variables 
       
y
y
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Para representar una superficie definida de forma implícita en dimensión 3:

var('x,y,z');implicit_plot3d(x^2+y^2==1,(x,-2,2),(y,-2,2),(z,-2,2)) #Gráfica de una superficie definida de forma implícita en 3d 
       
(x, y, z)
(x, y, z)
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Se puede visisualizar de otra forma:

var("x,y,z") implicit_plot3d(x^2+y^2==1,(x,-2,2),(y,-2,2),(z,-2,2), viewer='tachyon') #Gráfica anterior variando la visualización 
       

Para mostras dos superficies simultáneamente:

implicit_plot3d(x^2+y^2==1,(x,-2,2),(y,-2,2),(z,-2,2))+implicit_plot3d(x^2+y^2+z^2==2,(x,-2,2),(y,-2,2),(z,-2,2)) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Para representar superficies en forma paramétrica:

var("u,v") parametric_plot3d([cos(u)*v, sin(u)*v, 3/2-3*v/2], (u, 0, 2*pi), (v, 0, 1.5)) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Para representar dos superficies, una dentro de otra, de modo que se vean ambas, podemos usar la opción "opacity":

var("u,v") p1 = parametric_plot3d([cos(u)*v, sin(u)*v, 3/2-3*v/2], (u, 0, 2*pi), (v, 0, 1.5), opacity = 0.5, plot_points=[20,20]) p2 = parametric_plot3d([cos(u)/2, sin(u)/2, v-3/4], (u, 0, 2*pi), (v, 0, 3/2), plot_points=[20,20]) show(p1+p2) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

4. Otros gráficos

Dibuja círculos en 2d:

circle((0,0), 1,rgbcolor='red') 
       

Que pueden verse en 3d:

c=circle((0,0),1,rgbcolor='red') c.plot3d(z=0)+c.plot3d(z=1)+c.plot3d(z=2) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Mezclados con otros gráficos:

var('y,z') c=circle((0,0),1,rgbcolor='red',thickness=5); c.plot3d(z=0)+c.plot3d(z=1)+c.plot3d(z=2)+implicit_plot3d(x^2+y^2==1,(x,-2,2),(y,-2,2),(z,-2,2)) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Dibuja vectores:

arrow((0,0,0), (1,1,1)) 
       
Sleeping...
If no image appears re-execute the cell. 3-D viewer has been updated.

Sectores circulares, arcos, elipses, segmentos, puntos, texto, polígonos:

disk((0,0),1,(0,pi/2))+arc((0,0),1,sector=(pi/2,pi))+ellipse((0,0),2,1)+line([(-2,0),(0,-1)])+point((1,-0.5))+text('Sage dibuja cositas',(0.,-0.25))+polygon([(1,-0.25),(0.25,-0.5),(1.25,-0.4)]) 
       

Y cosas más complicadas:

L = [[6*cos(pi*i/100)+5*cos((6/2)*pi*i/100),6*sin(pi*i/100)-5*sin((6/2)*pi*i/100)] for i in range(200)] polygon2d(L, rgbcolor=(1/8,1/4,1/2)) 
       

O también matrices con valores entre 0 y 1, tomando el valor de cada posición como el tono de blanco (0 negro, 1 blanco):

n=100; A=matrix(RDF,n) A[1,1:6]=Matrix([0.5,0.5,1,0.5,1]) A[3,1:6]=Matrix([1,1/2,1/3,1/4,1/5]) A[5,1:6]=Matrix([1,1,1,1,1]) matrix_plot(A) 
       

Guardando gráficos 3D en formato pdf (vectorial)

from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np # fig es una "caja" para pintar dentro fig = plt.figure() # Esta parte la entiendo peor. Creo que lo que hace es "generar" los ejes en los que queremos proyectar el dibujo 3D. ax = fig.gca(projection='3d') # En X definimos un vector de puntos entre -5 y 5 con 0.25 entre ellos X = np.arange(-5, 5, 0.25) # En Y definimos un vector de puntos entre -5 y 5 con 0.25 entre ellos Y = np.arange(-5, 5, 0.25) # Creamos una malla (transformamos X,Y en matrices de modo que la posición X(i,j),Y(i,j) sea el elemento (X(i),Y(j)). X, Y = np.meshgrid(X, Y) # En R creamos una matriz que tiene en cada posición i,j el valor X(i)^2+Y(i)^2. Es decir, R es la gráfica de x^2+y^2 R = np.sqrt(X**2 + Y**2) # En z=sin(x^2+y^2). Z = np.sin(R) # La siguiente línea pinta la gráfica, y la guarda en surf surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,linewidth=0, antialiased=False) # Las siguientes líneas creo que son para cambiar el aspecto, pero no las he buscado. #ax.set_zlim(-1.01, 1.01) #ax.zaxis.set_major_locator(LinearLocator(10)) #ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f')) # colorbar carga un objeto "mapable", es decir, una imagen generada por otro comando de dibujo en un un cuadro "figure". fig.colorbar(surf, shrink=0.5, aspect=5) # Ya la tenemos pintada, así que la podemos guardar. plt.savefig('fig.pdf', bbox_inches='tight') 
       
 
       

Ejercicios (enunciados)

A) Dibuja la gráfica de la función sen(x) cuando x varía entre -2 y 2. 

B) Dibuja en la misma gráfica la función $\operatorname{sen}(x)$ y la función $\cos(x^2)$ cuando $x$ varía entre $-2$ y $2$.

C) Dibuja el área comprendida entre $\operatorname{sen}(x)$ y $\cos(x^2)$ cuando $x$ varía entre $-2$ y $2$.

D) Dibuja la gráfica del la siguiente superficie:

$$\{(x,y,z)\in R^3: x^2+y^2+z^2=1 \mbox{ si } z\leq 0, \   x^2+y^2+\frac{z^2}{4}=1 \mbox{ si } z\geq 0 \}$$

 

E) Dibuja la gráfica de la curva $x=\cos(t)+2\cos(t/4)$, $\ y=\operatorname{sen}(t)-2\operatorname{sen}(t/4)$ cuando $t\in [0,8\pi]$.

F) Dibuja la gráfica de la superficie $x^2+z^2=1+y^2$.

G) Dibuja las curvas de nivel de la superficie anterior con los planos paralelos al plano $XY$.

H) Dibuja la gráfica del la siguiente superficie:

$$\{(x,y,z)\in R^3: x^2+y^2+z^2=1 \mbox{ si } z\leq 0, \   x^2+y^2+\frac{z^2}{4}=1 \mbox{ si } z\geq 0 \}$$

--------------------------------------------------------------------------------------------------------------------

Ejercicios (respuestas)

A) Dibuja la gráfica de la función sen(x) cuando x varía entre -2 y 2.

 
       

B) Dibuja en la misma gráfica la función sen(x) y la función cos(x2) cuando x varía entre  y -2 y 2.

 
       

C) Dibuja el área comprendida entre sen(x) y cos(x2) cuando x varía entre -2 y 2.

 
       

D) Dibuja la gráfica del la siguiente superficie:

$$\{(x,y,z)\in R^3: x^2+y^2+z^2=1 \mbox{ si } z\leq 0, \   x^2+y^2+\frac{z^2}{4}=1 \mbox{ si } z\geq 0 \}$$

 
       

E) Dibuja la gráfica de la curva $x=\cos(t)+2\cos(t/4)$, $\ y=\operatorname{sen}(t)-2\operatorname{sen}(t/4)$ cuando $t\in [0,8\pi]$.

 
       

F) Dibuja la gráfica de la superficie $x^2+z^2=1+y^2$.

 
       

G) Dibuja las curvas de nivel de la superficie anterior con los planos paralelos al plano $XY$

 
       

H) Dibuja la gráfica del la siguiente superficie:

$$\{(x,y,z)\in R^3: x^2+y^2+z^2=1 \mbox{ si } z\leq 0, \   x^2+y^2+\frac{z^2}{4}=1 \mbox{ si } z\geq 0 \}$$