Skip to content

Commit 8bd2197

Browse files
Make spirals more awesome
1 parent af17bb9 commit 8bd2197

1 file changed

Lines changed: 27 additions & 25 deletions

File tree

‎streamlit_app.py‎

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,40 @@
1-
from collections import namedtuple
21
import altair as alt
3-
import math
2+
import numpy as np
43
import pandas as pd
54
import streamlit as st
65

76
"""
87
# Welcome to Streamlit!
98
10-
Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:
11-
9+
Edit `/streamlit_app.py` to customize this app to your heart's desire :heart:.
1210
If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community
1311
forums](https://discuss.streamlit.io).
1412
1513
In the meantime, below is an example of what you can do with just a few lines of code:
1614
"""
1715

18-
19-
with st.echo(code_location='below'):
20-
total_points = st.slider("Number of points in spiral", 1, 5000, 2000)
21-
num_turns = st.slider("Number of turns in spiral", 1, 100, 9)
22-
23-
Point = namedtuple('Point', 'x y')
24-
data = []
25-
26-
points_per_turn = total_points / num_turns
27-
28-
for curr_point_num in range(total_points):
29-
curr_turn, i = divmod(curr_point_num, points_per_turn)
30-
angle = (curr_turn + 1) * 2 * math.pi * i / points_per_turn
31-
radius = curr_point_num / total_points
32-
x = radius * math.cos(angle)
33-
y = radius * math.sin(angle)
34-
data.append(Point(x, y))
35-
36-
st.altair_chart(alt.Chart(pd.DataFrame(data), height=500, width=500)
37-
.mark_circle(color='#0068c9', opacity=0.5)
38-
.encode(x='x:Q', y='y:Q'))
16+
num_points = st.slider("Number of points in spiral", 1, 10000, 1100)
17+
num_turns = st.slider("Number of turns in spiral", 1, 300, 31)
18+
19+
indices = np.linspace(0, 1, num_points)
20+
theta = 2 * np.pi * num_turns * indices
21+
radius = indices
22+
23+
x = radius * np.cos(theta)
24+
y = radius * np.sin(theta)
25+
26+
df = pd.DataFrame({
27+
"x": x,
28+
"y": y,
29+
"idx": indices,
30+
"rand": np.random.randn(num_points),
31+
})
32+
33+
st.altair_chart(alt.Chart(df, height=700, width=700)
34+
.mark_point(filled=True)
35+
.encode(
36+
x=alt.X("x", axis=None),
37+
y=alt.Y("y", axis=None),
38+
color=alt.Color("idx", legend=None, scale=alt.Scale()),
39+
size=alt.Size("rand", legend=None, scale=alt.Scale(range=[1, 150])),
40+
))

0 commit comments

Comments
 (0)