File size: 2,372 Bytes
940c54e
64fb6d8
940c54e
881ba49
 
 
 
 
 
 
 
940c54e
881ba49
 
 
 
fd5fed7
881ba49
 
 
 
 
 
fd5fed7
881ba49
 
 
 
d275735
 
881ba49
 
 
d275735
 
881ba49
 
940c54e
881ba49
 
 
 
 
 
 
 
940c54e
881ba49
 
 
 
fd5fed7
0a2c66d
881ba49
 
 
fd5fed7
881ba49
 
fd5fed7
 
881ba49
 
 
fd5fed7
881ba49
 
fd5fed7
881ba49
 
fd5fed7
881ba49
940c54e
 
881ba49
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import gradio as gr
from data import temp_sensor_data, food_rating_data  # type: ignore

with gr.Blocks() as line_plots:
    with gr.Row():
        start = gr.DateTime("2021-01-01 00:00:00", label="Start")
        end = gr.DateTime("2021-01-05 00:00:00", label="End")
        apply_btn = gr.Button("Apply", scale=0)
    with gr.Row():
        group_by = gr.Radio(["None", "30m", "1h", "4h", "1d"], value="None", label="Group by")
        aggregate = gr.Radio(["sum", "mean", "median", "min", "max"], value="sum", label="Aggregation")

    temp_by_time = gr.LinePlot(
        temp_sensor_data,
        x="time",
        y="temperature",
        buttons=["export"],
    )
    temp_by_time_location = gr.LinePlot(
        temp_sensor_data,
        x="time",
        y="temperature",
        color="location",
        buttons=["export"],
    )

    time_graphs = [temp_by_time, temp_by_time_location]
    group_by.change(
        lambda group: [gr.LinePlot(x_bin=None if group == "None" else group)] * len(time_graphs),
        group_by,
        time_graphs
    )
    aggregate.change(
        lambda aggregate: [gr.LinePlot(y_aggregate=aggregate)] * len(time_graphs),
        aggregate,
        time_graphs
    )

    def rescale(select: gr.SelectData):
        return select.index
    rescale_evt = gr.on([plot.select for plot in time_graphs], rescale, None, [start, end])

    for trigger in [apply_btn.click, rescale_evt.then]:
        trigger(
            lambda start, end: [gr.LinePlot(x_lim=[start, end])] * len(time_graphs), [start, end], time_graphs
        )

    price_by_cuisine = gr.LinePlot(
        food_rating_data,
        x="cuisine",
        y="price",
        buttons=["export"],
    )
    with gr.Row():
        price_by_rating = gr.LinePlot(
            food_rating_data,
            title="Price by Rating (for Ratings >2)",
            x="rating",
            y="price",
            x_lim=[2, None],
            buttons=["export"],
        )
        price_by_rating_color = gr.LinePlot(
            food_rating_data,
            title="Price by Rating (for Ratings <4)",
            x="rating",
            y="price",
            x_lim=[None, 4],
            color="cuisine",
            color_map={"Italian": "red", "Mexican": "green", "Chinese": "blue"},
            buttons=["export"],
        )

if __name__ == "__main__":
    line_plots.launch()