Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
# Welcome to Streamlit!
# Aplicación de Espiral Interactiva con Streamlit

Edit `/streamlit_app.py` to customize this app to your heart's desire. :heart:
Esta es una simple aplicación web creada con [Streamlit](https://streamlit.io/) que genera y muestra una espiral.

If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
forums](https://discuss.streamlit.io).
## Características

- **Interactiva**: Puedes usar los deslizadores en la interfaz para cambiar el número de puntos y el número de vueltas de la espiral en tiempo real.
- **Visualización**: La espiral se dibuja usando la librería [Altair](https://altair-viz.github.io/).

## Cómo ejecutar la aplicación

1. Asegúrate de tener Python instalado.
2. Instala las dependencias:
```bash
pip install -r requirements.txt
```
3. Ejecuta la aplicación:
```bash
streamlit run streamlit_app.py
```
55 changes: 37 additions & 18 deletions streamlit_app.py
Original file line number Diff line number Diff line change
@@ -1,28 +1,26 @@
from collections import namedtuple
import altair as alt
import math
import pandas as pd
import streamlit as st
import math
from collections import namedtuple

"""
# Welcome to Streamlit!

Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:

If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
forums](https://discuss.streamlit.io).

In the meantime, below is an example of what you can do with just a few lines of code:
"""

def generate_spiral_data(total_points, num_turns):
"""
Genera los puntos de datos para una espiral.

with st.echo(code_location='below'):
total_points = st.slider("Number of points in spiral", 1, 5000, 2000)
num_turns = st.slider("Number of turns in spiral", 1, 100, 9)
Args:
total_points (int): El número total de puntos a generar.
num_turns (int): El número de vueltas en la espiral.

Returns:
pd.DataFrame: Un DataFrame de Pandas con las columnas 'x' e 'y'.
"""
Point = namedtuple('Point', 'x y')
data = []

if num_turns == 0:
return pd.DataFrame(data)

points_per_turn = total_points / num_turns

for curr_point_num in range(total_points):
Expand All @@ -33,6 +31,27 @@
y = radius * math.sin(angle)
data.append(Point(x, y))

st.altair_chart(alt.Chart(pd.DataFrame(data), height=500, width=500)
return pd.DataFrame(data)

# --- Interfaz de Usuario de Streamlit ---

st.title("Generador de Espiral Interactiva")

st.markdown(
"Esta aplicación genera y visualiza una espiral basada en los parámetros que elijas a continuación. "
"Usa los deslizadores para cambiar el número de puntos y vueltas."
)

# Sliders para la entrada del usuario
total_points = st.slider("Número de puntos en la espiral", 1, 5000, 2000)
num_turns = st.slider("Número de vueltas en la espiral", 1, 100, 9)

# Generar y mostrar el gráfico
if total_points > 0 and num_turns > 0:
spiral_data = generate_spiral_data(total_points, num_turns)

st.altair_chart(alt.Chart(spiral_data, height=500, width=500)
.mark_circle(color='#0068c9', opacity=0.5)
.encode(x='x:Q', y='y:Q'))
.encode(x='x:Q', y='y:Q'),
use_container_width=True
)