248 lines
5.2 KiB
Markdown
248 lines
5.2 KiB
Markdown
---
|
||
components:
|
||
- rx.recharts.AreaChart
|
||
- rx.recharts.Area
|
||
---
|
||
|
||
# Area Chart
|
||
|
||
```python exec
|
||
import reflex as rx
|
||
from pcweb.templates.docpage import docdemo, docgraphing
|
||
import random
|
||
|
||
data = [
|
||
{
|
||
"name": "Page A",
|
||
"uv": 4000,
|
||
"pv": 2400,
|
||
"amt": 2400
|
||
},
|
||
{
|
||
"name": "Page B",
|
||
"uv": 3000,
|
||
"pv": 1398,
|
||
"amt": 2210
|
||
},
|
||
{
|
||
"name": "Page C",
|
||
"uv": 2000,
|
||
"pv": 9800,
|
||
"amt": 2290
|
||
},
|
||
{
|
||
"name": "Page D",
|
||
"uv": 2780,
|
||
"pv": 3908,
|
||
"amt": 2000
|
||
},
|
||
{
|
||
"name": "Page E",
|
||
"uv": 1890,
|
||
"pv": 4800,
|
||
"amt": 2181
|
||
},
|
||
{
|
||
"name": "Page F",
|
||
"uv": 2390,
|
||
"pv": 3800,
|
||
"amt": 2500
|
||
},
|
||
{
|
||
"name": "Page G",
|
||
"uv": 3490,
|
||
"pv": 4300,
|
||
"amt": 2100
|
||
}
|
||
]
|
||
|
||
range_data = [
|
||
{
|
||
"day": "05-01",
|
||
"temperature": [
|
||
-1,
|
||
10
|
||
]
|
||
},
|
||
{
|
||
"day": "05-02",
|
||
"temperature": [
|
||
2,
|
||
15
|
||
]
|
||
},
|
||
{
|
||
"day": "05-03",
|
||
"temperature": [
|
||
3,
|
||
12
|
||
]
|
||
},
|
||
{
|
||
"day": "05-04",
|
||
"temperature": [
|
||
4,
|
||
12
|
||
]
|
||
},
|
||
{
|
||
"day": "05-05",
|
||
"temperature": [
|
||
12,
|
||
16
|
||
]
|
||
},
|
||
{
|
||
"day": "05-06",
|
||
"temperature": [
|
||
5,
|
||
16
|
||
]
|
||
},
|
||
{
|
||
"day": "05-07",
|
||
"temperature": [
|
||
3,
|
||
12
|
||
]
|
||
},
|
||
{
|
||
"day": "05-08",
|
||
"temperature": [
|
||
0,
|
||
8
|
||
]
|
||
},
|
||
{
|
||
"day": "05-09",
|
||
"temperature": [
|
||
-3,
|
||
5
|
||
]
|
||
}
|
||
]
|
||
|
||
|
||
area_chart_state = """class AreaState(rx.State):
|
||
data=data
|
||
|
||
def randomize_data(self):
|
||
for i in range(len(self.data)):
|
||
self.data[i]["uv"] = random.randint(0, 10000)
|
||
self.data[i]["pv"] = random.randint(0, 10000)
|
||
self.data[i]["amt"] = random.randint(0, 10000)
|
||
|
||
|
||
"""
|
||
exec(area_chart_state)
|
||
|
||
|
||
area_chart_example = """rx.recharts.area_chart(
|
||
rx.recharts.area(
|
||
data_key="uv",
|
||
stroke="#8884d8",
|
||
fill="#8884d8"
|
||
),
|
||
rx.recharts.x_axis(data_key="name"),
|
||
rx.recharts.y_axis(),
|
||
data=data)"""
|
||
|
||
area_chart_example_2 = """rx.recharts.area_chart(
|
||
rx.recharts.area(
|
||
data_key="uv",
|
||
stroke="#8884d8",
|
||
fill="#8884d8"
|
||
),
|
||
rx.recharts.area(
|
||
data_key="pv",
|
||
stroke="#82ca9d",
|
||
fill="#82ca9d"
|
||
),
|
||
rx.recharts.x_axis(data_key="name"),
|
||
rx.recharts.y_axis(),
|
||
data=data)"""
|
||
|
||
|
||
range_area_chart = """rx.recharts.area_chart(
|
||
rx.recharts.area(
|
||
data_key="temperature",
|
||
stroke="#8884d8",
|
||
fill="#8884d8"
|
||
),
|
||
rx.recharts.x_axis(data_key="day"),
|
||
rx.recharts.y_axis(),
|
||
data=range_data)"""
|
||
|
||
|
||
area_chart_example_with_state = """rx.recharts.area_chart(
|
||
rx.recharts.area(
|
||
data_key="uv",
|
||
stroke="#8884d8",
|
||
fill="#8884d8",
|
||
type_="natural",
|
||
on_click=AreaState.randomize_data,
|
||
|
||
),
|
||
rx.recharts.area(
|
||
data_key="pv",
|
||
stroke="#82ca9d",
|
||
fill="#82ca9d",
|
||
type_="natural",
|
||
),
|
||
rx.recharts.x_axis(
|
||
data_key="name",
|
||
),
|
||
rx.recharts.y_axis(),
|
||
rx.recharts.legend(),
|
||
rx.recharts.cartesian_grid(
|
||
stroke_dasharray="3 3",
|
||
),
|
||
data=AreaState.data,
|
||
width="100%",
|
||
height=400,
|
||
)
|
||
"""
|
||
```
|
||
|
||
An area chart combines the line chart and bar chart to show how one or more groups’ numeric values change over the progression of a second variable, typically that of time. An area chart is distinguished from a line chart by the addition of shading between lines and a baseline, like in a bar chart.
|
||
|
||
For an area chart we must define an `rx.recharts.area()` component that has a `data_key` which clearly states which variable in our data we are tracking. In this simple example we track `uv` against `name` and therefore set the `rx.recharts.x_axis` to equal `name`.
|
||
|
||
```python eval
|
||
docgraphing(
|
||
area_chart_example,
|
||
comp = eval(area_chart_example),
|
||
data = "data=" + str(data)
|
||
)
|
||
```
|
||
|
||
Multiple areas can be placed on the same `area_chart`.
|
||
|
||
```python eval
|
||
docgraphing(
|
||
area_chart_example_2,
|
||
comp = eval(area_chart_example_2),
|
||
data = "data=" + str(data)
|
||
)
|
||
```
|
||
|
||
You can also assign a range in the area by assiging the data_key in the `rx.recharts.area` to a list with two elements, i.e. here a range of two temperatures for each date.
|
||
|
||
```python eval
|
||
docgraphing(
|
||
area_chart_example_2,
|
||
comp = eval(range_area_chart),
|
||
data = "data=" + str(range_data)
|
||
)
|
||
```
|
||
|
||
Here is an example of an area graph with a `State`. Here we have defined a function `randomize_data`, which randomly changes the data for both graphs when the first defined `area` is clicked on using `on_click=AreaState.randomize_data`.
|
||
|
||
```python eval
|
||
docdemo(area_chart_example_with_state,
|
||
state=area_chart_state,
|
||
comp=eval(area_chart_example_with_state),
|
||
context=True,
|
||
)
|
||
```
|