|
1 | | -from collections import namedtuple |
2 | 1 | import altair as alt |
3 | | -import math |
| 2 | +import numpy as np |
4 | 3 | import pandas as pd |
5 | 4 | import streamlit as st |
6 | 5 |
|
7 | 6 | """ |
8 | 7 | # Welcome to Streamlit! |
9 | 8 |
|
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:. |
12 | 10 | If you have any questions, checkout our [documentation](https://docs.streamlit.io) and [community |
13 | 11 | forums](https://discuss.streamlit.io). |
14 | 12 |
|
15 | 13 | In the meantime, below is an example of what you can do with just a few lines of code: |
16 | 14 | """ |
17 | 15 |
|
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