import altair as alt import numpy as np import pandas as pd import streamlit as st # 1. Force the page configuration to a clean wide layout st.set_page_config( page_title="Interactive Spiral Visualizer", page_icon="📊", layout="wide" ) # 2. Custom CSS to absolutely force white backgrounds, blue headings, and crisp black text st.markdown( """ """, unsafe_transform=True, ) # 3. Clean Header Section (Inherits Blue Headings and Black Text) st.markdown("

✨ Welcome to Streamlit!

", unsafe_html=True) st.markdown( """ Edit `/streamlit_app.py` to customize this app to your heart's desire ❤️. If you have any questions, check out our [documentation](https://docs.streamlit.io) and [community forums](https://discuss.streamlit.io). --- ### **Example Simulation** *Adjust the controls on the left to watch the spiral update in real-time.* """ ) # 4. Two-Column Layout (Controls on the left, Chart on the right) col1, col2 = st.columns([1, 2], gap="large") with col1: st.markdown("### **🎛️ Control Panel**") with st.container(border=True): num_points = st.slider("Number of points in spiral", 1, 10000, 1100) num_turns = st.slider("Number of turns in spiral", 1, 300, 31) # --- EXACTLY UNCHANGED DATA LOGIC --- indices = np.linspace(0, 1, num_points) theta = 2 * np.pi * num_turns * indices radius = indices x = radius * np.cos(theta) y = radius * np.sin(theta) df = pd.DataFrame({ "x": x, "y": y, "idx": indices, "rand": np.random.randn(num_points), }) # ----------------------------------- with col2: st.markdown("### **📊 Generated Visualization**") # 5. Styled Altair Chart matching the White & Blue aesthetic chart = ( alt.Chart(df, height=600, width=600) .mark_point( filled=True, opacity=0.85 ) .encode( x=alt.X("x", axis=None), y=alt.Y("y", axis=None), # CHANGED: 'blues' scheme creates a premium transition from soft light blue to deep royal blue color=alt.Color("idx", legend=None, scale=alt.Scale(scheme="blues")), size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])), ) .configure_view( strokeWidth=0 # Removes any unnecessary dark bounding boxes around the chart ) ) # Render the chart responsively st.altair_chart(chart, use_container_width=True)