堆叠面积图(AreaStackChart)

1import { AreaStackChart, Chart, ChartMarkStackingMethod, Navigation, NavigationStack, Picker, Script, Text, useState, VStack } from "scripting"
2
3const data = [
4  { name: "Burger", price: 0.07, year: 1960 },
5  { name: "Cheese", price: 0.03, year: 1960 },
6  { name: "Bun", price: 0.05, year: 1960 },
7
8  { name: "Burger", price: 0.10, year: 1970 },
9  { name: "Cheese", price: 0.04, year: 1970 },
10  { name: "Bun", price: 0.06, year: 1970 },
11
12  { name: "Burger", price: 0.15, year: 1980 },
13  { name: "Cheese", price: 0.10, year: 1980 },
14  { name: "Bun", price: 0.1, year: 1980 },
15
16  { name: "Burger", price: 0.23, year: 1990 },
17  { name: "Cheese", price: 0.12, year: 1990 },
18  { name: "Bun", price: 0.13, year: 1990 },
19
20  { name: "Burger", price: 0.32, year: 2000 },
21  { name: "Cheese", price: 0.15, year: 2000 },
22  { name: "Bun", price: 0.15, year: 2000 },
23
24  { name: "Burger", price: 0.49, year: 2010 },
25  { name: "Cheese", price: 0.20, year: 2010 },
26  { name: "Bun", price: 0.19, year: 2010 },
27
28  { name: "Burger", price: 0.60, year: 2020 },
29  { name: "Cheese", price: 0.26, year: 2020 },
30  { name: "Bun", price: 0.24, year: 2020 },
31]
32
33const stackings: ChartMarkStackingMethod[] = [
34  'center',
35  'normalized',
36  'standard',
37  'unstacked'
38]
39
40function Example() {
41  const [stacking, setStacking] = useState<ChartMarkStackingMethod>('standard')
42
43  return <NavigationStack>
44    <VStack
45      navigationTitle={"AreaStackChart"}
46      navigationBarTitleDisplayMode={"inline"}
47    >
48      <Picker
49        title={"StackingMethod"}
50        value={stacking}
51        onChanged={setStacking as any}
52        pickerStyle={"menu"}
53      >
54        {stackings.map(item =>
55          <Text tag={item}>{item}</Text>
56        )}
57      </Picker>
58      <Chart
59        frame={{
60          height: 300
61        }}
62      >
63        <AreaStackChart
64          marks={data.map(item => ({
65            category: item.name,
66            label: item.year.toString(),
67            value: item.price,
68            stacking: stacking,
69          }))}
70        />
71      </Chart>
72    </VStack>
73  </NavigationStack>
74}
75
76async function run() {
77  await Navigation.present({
78    element: <Example />
79  })
80
81  Script.exit()
82}
83
84run()