diff --git a/README.md b/README.md index 10dbdedd6091..3c0cc40eaa56 100644 --- a/README.md +++ b/README.md @@ -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 + ``` diff --git a/streamlit_app.py b/streamlit_app.py index ac305b93bffd..b1eb16225570 100644 --- a/streamlit_app.py +++ b/streamlit_app.py @@ -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): @@ -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 + )