Mostrando entradas con la etiqueta matplotlib. Mostrar todas las entradas
Mostrando entradas con la etiqueta matplotlib. Mostrar todas las entradas

domingo, 13 de junio de 2021

Maquina de Galton en Python

 Podemos ver una entrada que habla sobre el tema desarrollada en Excel.

Máquina de Galton en Excel

En esta ocasión vamos a crear un procedimiento en Python.


import numpy as np
import matplotlib.pyplot as plt
from random import randint
levels = int(input("How many levels do you want?(min 1/ 20 by default) ") or 20)
if levels >= 1:
  lanes = [0]*(levels)
else:
  print("The value of levels can't be lower than 1.")
  exit()
for h in range((levels)**2*100):
  stored = -1
  for j in range(levels):
    stored += randint(0, 1)
  lanes[stored] += 1
print((levels)**2*100, "balls were used in totall")
print(lanes)
X = np.arange(-((len(lanes)/2)-.5), (len(lanes)/2)+.5)
plt.suptitle('Galton Board')
plt.bar(X + 0.00, lanes, width=0.25)
plt.show()
plt.savefig("BellCurve.png")

La clave del algoritmo está en la línea:

stored += randint(0, 1)

Esta línea lo que hace es añadir un 1 o un 0 con una probabilidad de ½. Esto representa lo que hacen las bolas al tropezar con uno de los pivotes, donde pueden ir a la derecha o a la izquierda con una probabilidad del 50%. Si una bola baja 10 niveles y va la derecha en seis ocasiones y a la izquierda en cuatro ocasiones, el valor de la variable stored sería 6.

martes, 12 de marzo de 2019

Histogramas avanzados en Python

En un post anterior explicaba como hacer un histograma simple, en este me gustaría expandir un poco mas en ello.

Para emepzar me gustaría explicar como darle un titulo o añadir algunas cosas para que quede mas bonito y la información repesentada se entienda mejor.

Para poner un titulo el codigo seria alg así:
 plt.title("Tú titulo")  

Si quisieramos decir que valor está en el valor

miércoles, 26 de septiembre de 2018

Histograma en Python

Para hacer un histograma en Python vamos ha utilizar la librería matplotlib y generaremos los valores de manera aleatoria. El código es este:

import matplotlib.pyplot as plt
import random as ran
values=[]
for x in range(1,11):
   values.append(ran.randrange(11))
plt.hist(values, bins=10)
plt.show()
Usando el for vamos a ir generando números aleatorios y metiendo los en values.
Aquí entra la parte de la librería matplotlib, le pedimos que ejecute hist para indicar que queremos hacer un histograma, también le damos el valor de values para indicar con valores queremos trabajar y por ultimo indicamos los bins que determina el numero de columnas que queremos que se divida la información. Lo imprimimos todo y ya está.

Una variación que podemos hacer es que sin que tú hagas nada te genere mas de histograma con este codigo:


import matplotlib.pyplot as plt
import random as ran
def histograma():
    values=[]
    for x in range(1,11):
        values.append(ran.randrange(11))
    #values=[0,0.6,1.4,1.6,2.2,2.5,2.6,3.2,3.5,3.9,4.2,6]
    plt.hist(values, bins=10)
    plt.show()

for x in range(1,6):
    histograma()

Nota: En la mayoría de paginas web que ejecutan Python no sé podrán ver los gráficos en sí. Para ello necesitaras usar un programa mas potente que pueda procesar las librerías.
Si ejecutas este código en algunos editores de código como PyCharm, al importar las librerías no solo tendrás que importarla escribiéndola en el código si no que tendrás que importarla desde el propio editor. Aquí os enseñamos cómo hacerlo: https://www.youtube.com/watch?v=aROm4KYHXLI&feature=youtu.be

sábado, 18 de agosto de 2018

Donut de colores

 Utilizando la librería matplotlib.pyplot hemos conseguido generar unos puntos de diferentes colores y que no se impriman cuando están dentro de un rango, en este caso hemos creado una forma redonda como si fuera un Donut, aunque se puede cambiar para que haga cualquier forma.

El codigo Python:
from math import sqrt  
import random  
import matplotlib.pyplot as plt  
n = 10000  
p=q=0  
plt.figure(figsize=(7,7))  
for i in range(n):  
  p = random.random() * 8 - 4  
  q = random.random() * 8 - 4  
  r = sqrt(p ** 2 + q ** 2)  
  if 2<r<4:  
    x,y=p,q  
    plt.plot(x,y,'o',markersize=1)  
plt.show()  

El resultado de ese codigo:

En el código utilizamos coordenadas cartesianas para saber en qué lugar van a estar los puntos, generamos aleatoriamente las variables x e y que pondrá los puntos aleatoriamente por toda la pantalla, no sin antes usando un if para filtrar los puntos que son impresos en la pantalla, aquí es donde podemos elegir la forma de la figura que se termine de imprimir en pantalla.

En nuestro caso esto es la parte que crea esa forma de donut.

p = random.random() * 8 - 4   
q = random.random() * 8 - 4   
r = sqrt(p ** 2 + q ** 2)   
if 2<r<4:   
  x,y=p,q   
  plt.plot(x,y,'o',markersize=1)   

Primero generamos p y q aleatoriamente con random.random(), como esto solo genera números entre uno y cero la multiplicarlo por ocho y restarle cuatro le damos los márgenes que queremos para las coordenadas cartesianas. Luego aplicamos el teorema de Pitágoras para saber a qué distancia está ese punto desde el centro del plano.

Esta imagen puede que ayude a entender lo que estamos intentando hacer:


Y luego usando un if, si ese punto está dentro de las coordenadas dos y cuatro entonces les paso los valores de p,q y x,y para añadirlo al plot y luego imprimirlo.

Nota: Si ejecutas este código en algunos editores de código como PyCharm, al importar la librería matplotlib no solo tendrás que importarla escribiéndola en el código si no que tendrás que importarla desde el propio editor. Aquí os enseñamos cómo hacerlo: https://www.youtube.com/watch?v=aROm4KYHXLI&feature=youtu.be