manim-web 0.23.0 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/export/SlideDeckExporter.d.ts +210 -0
- package/dist/export/SlideDeckExporter.d.ts.map +1 -0
- package/dist/export/index.d.ts +1 -0
- package/dist/export/index.d.ts.map +1 -1
- package/dist/html2canvas-DECPJJGt.js +4025 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es-BiZp4vgJ.js +5753 -0
- package/dist/index.js +3 -3
- package/dist/integrations/react.js +17 -17
- package/dist/integrations/vue.js +16 -16
- package/dist/jspdf.es.min-CvMJL6nS.js +18228 -0
- package/dist/manim-web.browser.js +5532 -3742
- package/dist/mobjects/graph/ForceDirectedLayout.d.ts +65 -0
- package/dist/mobjects/graph/ForceDirectedLayout.d.ts.map +1 -0
- package/dist/mobjects/graph/GenericGraph.d.ts +11 -0
- package/dist/mobjects/graph/GenericGraph.d.ts.map +1 -1
- package/dist/mobjects/graph/SankeyDiagram.d.ts +122 -0
- package/dist/mobjects/graph/SankeyDiagram.d.ts.map +1 -0
- package/dist/mobjects/graph/index.d.ts +4 -1
- package/dist/mobjects/graph/index.d.ts.map +1 -1
- package/dist/mobjects/graph/layoutAlgorithms.d.ts +54 -0
- package/dist/mobjects/graph/layoutAlgorithms.d.ts.map +1 -1
- package/dist/mobjects/graph/sankeyLayout.d.ts +97 -0
- package/dist/mobjects/graph/sankeyLayout.d.ts.map +1 -0
- package/dist/mobjects/graphing/BoxPlot.d.ts +99 -0
- package/dist/mobjects/graphing/BoxPlot.d.ts.map +1 -0
- package/dist/mobjects/graphing/CandlestickChart.d.ts +191 -0
- package/dist/mobjects/graphing/CandlestickChart.d.ts.map +1 -0
- package/dist/mobjects/graphing/DomainColoring.d.ts +114 -0
- package/dist/mobjects/graphing/DomainColoring.d.ts.map +1 -0
- package/dist/mobjects/graphing/FourierEpicycles.d.ts +149 -0
- package/dist/mobjects/graphing/FourierEpicycles.d.ts.map +1 -0
- package/dist/mobjects/graphing/FourierSeries.d.ts +60 -0
- package/dist/mobjects/graphing/FourierSeries.d.ts.map +1 -0
- package/dist/mobjects/graphing/Histogram.d.ts +71 -0
- package/dist/mobjects/graphing/Histogram.d.ts.map +1 -0
- package/dist/mobjects/graphing/ScatterPlot.d.ts +66 -0
- package/dist/mobjects/graphing/ScatterPlot.d.ts.map +1 -0
- package/dist/mobjects/graphing/ViolinPlot.d.ts +83 -0
- package/dist/mobjects/graphing/ViolinPlot.d.ts.map +1 -0
- package/dist/mobjects/graphing/fourier.d.ts +104 -0
- package/dist/mobjects/graphing/fourier.d.ts.map +1 -0
- package/dist/mobjects/graphing/index.d.ts +10 -0
- package/dist/mobjects/graphing/index.d.ts.map +1 -1
- package/dist/mobjects/graphing/stats.d.ts +128 -0
- package/dist/mobjects/graphing/stats.d.ts.map +1 -0
- package/dist/purify.es-MUrypqLF.js +864 -0
- package/dist/serialization/index.d.ts +2 -0
- package/dist/serialization/index.d.ts.map +1 -1
- package/dist/serialization/urlState.d.ts +127 -0
- package/dist/serialization/urlState.d.ts.map +1 -0
- package/dist/{src-BRT6RDfk.js → src-Dq6hmMfV.js} +3347 -1557
- package/dist/typeof-CcP5rTWg.js +11 -0
- package/package.json +2 -1
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Animation, AnimationOptions } from '../../animation/Animation';
|
|
2
|
+
import { Vector3Tuple } from '../../core/Mobject';
|
|
3
|
+
import { GenericGraph } from './GenericGraph';
|
|
4
|
+
import { VertexId } from './graphTypes';
|
|
5
|
+
/**
|
|
6
|
+
* Options for the ForceDirectedLayout animation.
|
|
7
|
+
*/
|
|
8
|
+
export interface ForceDirectedLayoutOptions extends AnimationOptions {
|
|
9
|
+
/** Number of simulation steps to run. Default: 50. */
|
|
10
|
+
iterations?: number;
|
|
11
|
+
/** Cooling factor applied to the temperature each step. Default: 0.95. */
|
|
12
|
+
cooling?: number;
|
|
13
|
+
/** Layout scale. It sets the force constant and the initial temperature. Default: 2. */
|
|
14
|
+
scale?: number;
|
|
15
|
+
/** Layout center. Default: [0, 0, 0]. */
|
|
16
|
+
center?: Vector3Tuple;
|
|
17
|
+
/** Explicit initial positions. They override the random or seeded start. */
|
|
18
|
+
initialPositions?: Map<VertexId, Vector3Tuple>;
|
|
19
|
+
/** Seed for the random initial positions. Omit to start from the current positions. */
|
|
20
|
+
seed?: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class ForceDirectedLayout extends Animation {
|
|
23
|
+
private _graph;
|
|
24
|
+
private _iterations;
|
|
25
|
+
private _cooling;
|
|
26
|
+
private _scale;
|
|
27
|
+
private _center;
|
|
28
|
+
private _seed?;
|
|
29
|
+
private _initialPositions?;
|
|
30
|
+
private _vertices;
|
|
31
|
+
private _edges;
|
|
32
|
+
/** One positions snapshot per step (length = iterations + 1). */
|
|
33
|
+
private _trajectory;
|
|
34
|
+
constructor(graph: GenericGraph, options?: ForceDirectedLayoutOptions);
|
|
35
|
+
/**
|
|
36
|
+
* Snapshot the graph and build the full simulation trajectory once.
|
|
37
|
+
*/
|
|
38
|
+
begin(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Build the trajectory from the initial positions to the settled layout.
|
|
41
|
+
* Each entry is the positions after one more step.
|
|
42
|
+
*/
|
|
43
|
+
private _computeTrajectory;
|
|
44
|
+
/** Resolve the starting positions from the options or the graph. */
|
|
45
|
+
private _resolveInitialPositions;
|
|
46
|
+
/**
|
|
47
|
+
* Move the graph's vertices to the simulation state for `alpha`.
|
|
48
|
+
* It interpolates between the two nearest trajectory snapshots, so the motion
|
|
49
|
+
* is smooth. `alpha` 0 is the initial layout and `alpha` 1 is the settled one.
|
|
50
|
+
*/
|
|
51
|
+
interpolate(alpha: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get the settled layout (the last trajectory snapshot).
|
|
54
|
+
* The map is empty until `begin()` runs.
|
|
55
|
+
*/
|
|
56
|
+
getSettledPositions(): Map<VertexId, Vector3Tuple>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Factory for a ForceDirectedLayout animation.
|
|
60
|
+
* @param graph - The graph to relax.
|
|
61
|
+
* @param options - Animation and simulation options.
|
|
62
|
+
* @returns A new ForceDirectedLayout animation.
|
|
63
|
+
*/
|
|
64
|
+
export declare function forceDirectedLayout(graph: GenericGraph, options?: ForceDirectedLayoutOptions): ForceDirectedLayout;
|
|
65
|
+
//# sourceMappingURL=ForceDirectedLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ForceDirectedLayout.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/ForceDirectedLayout.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAa,MAAM,cAAc,CAAC;AASnD;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wFAAwF;IACxF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAyBD,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAC,CAA8B;IAExD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAmB;IAEjC,iEAAiE;IACjE,OAAO,CAAC,WAAW,CAAoC;gBAE3C,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,0BAA+B;IAWzE;;OAEG;IACM,KAAK,IAAI,IAAI;IAOtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAuB1B,oEAAoE;IACpE,OAAO,CAAC,wBAAwB;IA4BhC;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAsBhC;;;OAGG;IACH,mBAAmB,IAAI,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC;CAUnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,OAAO,CAAC,EAAE,0BAA0B,GACnC,mBAAmB,CAErB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Mobject, Vector3Tuple } from '../../core/Mobject';
|
|
2
2
|
import { Dot } from '../geometry/Dot';
|
|
3
3
|
import { VertexId, EdgeTuple, LayoutType, VertexStyleOptions, EdgeStyleOptions, VertexConfig, EdgeConfig, LayoutConfig, GenericGraphOptions } from './graphTypes';
|
|
4
|
+
import { ForceDirectedLayout, ForceDirectedLayoutOptions } from './ForceDirectedLayout';
|
|
4
5
|
import { Text } from '../text/Text';
|
|
5
6
|
/**
|
|
6
7
|
* GenericGraph - Base class for graph visualization
|
|
@@ -172,6 +173,16 @@ export declare class GenericGraph extends Mobject {
|
|
|
172
173
|
* Get all vertex positions
|
|
173
174
|
*/
|
|
174
175
|
getPositions(): Map<VertexId, Vector3Tuple>;
|
|
176
|
+
/**
|
|
177
|
+
* Build an animation that relaxes the graph with a live spring
|
|
178
|
+
* (force-directed) simulation. The vertices move step by step over the
|
|
179
|
+
* animation's run time, so the graph visibly settles.
|
|
180
|
+
*
|
|
181
|
+
* The scale, center, and iterations default to this graph's layout config.
|
|
182
|
+
* @param options - Animation and simulation options.
|
|
183
|
+
* @returns A ForceDirectedLayout animation.
|
|
184
|
+
*/
|
|
185
|
+
animateSpringLayout(options?: ForceDirectedLayoutOptions): ForceDirectedLayout;
|
|
175
186
|
/**
|
|
176
187
|
* Set the color of a specific vertex
|
|
177
188
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GenericGraph.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/GenericGraph.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GenericGraph.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/GenericGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { VGroup } from '../../core/VGroup';
|
|
2
|
+
import { VMobject } from '../../core/VMobject';
|
|
3
|
+
import { Rectangle } from '../geometry/Rectangle';
|
|
4
|
+
import { LinkLayout, SankeyLinkInput, SankeyNodeInput, SankeyOrientation } from './sankeyLayout';
|
|
5
|
+
/** How a link derives its color from its endpoints. */
|
|
6
|
+
export type SankeyLinkColorMode = 'source' | 'target' | 'blend';
|
|
7
|
+
/** A span (top and bottom y) along a node edge. */
|
|
8
|
+
export interface SankeySpan {
|
|
9
|
+
top: number;
|
|
10
|
+
bottom: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Options for {@link SankeyDiagram}.
|
|
14
|
+
*/
|
|
15
|
+
export interface SankeyDiagramOptions {
|
|
16
|
+
/** Nodes keyed by id. */
|
|
17
|
+
nodes: SankeyNodeInput[];
|
|
18
|
+
/** Directed flows between nodes. */
|
|
19
|
+
links: SankeyLinkInput[];
|
|
20
|
+
/** Node thickness along the flow axis. Default: 0.3 */
|
|
21
|
+
nodeWidth?: number;
|
|
22
|
+
/** Gap between stacked nodes in one column. Default: 0.4 */
|
|
23
|
+
nodePadding?: number;
|
|
24
|
+
/** Distance between adjacent columns. Default: 3 */
|
|
25
|
+
layerSpacing?: number;
|
|
26
|
+
/** Target length of the tallest column. Default: 4 */
|
|
27
|
+
height?: number;
|
|
28
|
+
/** Minimum node length along the stacking axis. Default: 0.05 */
|
|
29
|
+
minNodeLength?: number;
|
|
30
|
+
/** Flow direction. Default: 'horizontal' */
|
|
31
|
+
orientation?: SankeyOrientation;
|
|
32
|
+
/** Whether to render node labels. Default: true */
|
|
33
|
+
showLabels?: boolean;
|
|
34
|
+
/** Label font size. Default: 24 */
|
|
35
|
+
labelFontSize?: number;
|
|
36
|
+
/** Gap between a node and its label. Default: 0.15 */
|
|
37
|
+
labelBuff?: number;
|
|
38
|
+
/** Node fill opacity. Default: 1 */
|
|
39
|
+
nodeFillOpacity?: number;
|
|
40
|
+
/** Link (ribbon) fill opacity. Default: 0.5 */
|
|
41
|
+
linkOpacity?: number;
|
|
42
|
+
/** How a link colors itself from its endpoints. Default: 'source' */
|
|
43
|
+
linkColorMode?: SankeyLinkColorMode;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A node rectangle inside a {@link SankeyDiagram}.
|
|
47
|
+
*/
|
|
48
|
+
export declare class SankeyNode extends Rectangle {
|
|
49
|
+
/** Node identifier. */
|
|
50
|
+
readonly id: string;
|
|
51
|
+
/** Column index (0 = left-most for a horizontal diagram). */
|
|
52
|
+
readonly layer: number;
|
|
53
|
+
/** `max(incoming total, outgoing total)`. */
|
|
54
|
+
readonly throughput: number;
|
|
55
|
+
constructor(options: ConstructorParameters<typeof Rectangle>[0] & {
|
|
56
|
+
id: string;
|
|
57
|
+
layer: number;
|
|
58
|
+
throughput: number;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A flow ribbon inside a {@link SankeyDiagram}.
|
|
63
|
+
*
|
|
64
|
+
* The ribbon is a closed filled VMobject built from two cubic-bezier edges (a
|
|
65
|
+
* top and a bottom S-curve) joined by the straight source and target spans. Its
|
|
66
|
+
* thickness is proportional to {@link value}.
|
|
67
|
+
*/
|
|
68
|
+
export declare class SankeyLink extends VMobject {
|
|
69
|
+
/** Source node id. */
|
|
70
|
+
readonly source: string;
|
|
71
|
+
/** Target node id. */
|
|
72
|
+
readonly target: string;
|
|
73
|
+
/** Flow magnitude. */
|
|
74
|
+
readonly value: number;
|
|
75
|
+
private readonly _width;
|
|
76
|
+
private readonly _sourceSpan;
|
|
77
|
+
private readonly _targetSpan;
|
|
78
|
+
constructor(layout: LinkLayout, orientation: SankeyOrientation, color: string, fillOpacity: number);
|
|
79
|
+
/** Ribbon thickness (proportional to {@link value}). */
|
|
80
|
+
getLinkWidth(): number;
|
|
81
|
+
/** Span occupied on the source node's edge, in horizontal layout space. */
|
|
82
|
+
getSourceSpan(): SankeySpan;
|
|
83
|
+
/** Span occupied on the target node's edge, in horizontal layout space. */
|
|
84
|
+
getTargetSpan(): SankeySpan;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* SankeyDiagram - a layered flow diagram of nodes and proportional-width links.
|
|
88
|
+
*
|
|
89
|
+
* Nodes are placed in columns from sources to sinks. Each link is a filled
|
|
90
|
+
* cubic-bezier ribbon whose thickness is proportional to its value, stacked
|
|
91
|
+
* along each node's edge so sibling links do not overlap. A node with unequal
|
|
92
|
+
* incoming and outgoing totals is sized by the larger of the two.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* const sankey = new SankeyDiagram({
|
|
97
|
+
* nodes: [{ id: 'a' }, { id: 'b' }, { id: 'c' }],
|
|
98
|
+
* links: [
|
|
99
|
+
* { source: 'a', target: 'b', value: 3 },
|
|
100
|
+
* { source: 'a', target: 'c', value: 1 },
|
|
101
|
+
* ],
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
export declare class SankeyDiagram extends VGroup {
|
|
106
|
+
private readonly _nodes;
|
|
107
|
+
private readonly _links;
|
|
108
|
+
private readonly _nodeById;
|
|
109
|
+
constructor(options: SankeyDiagramOptions);
|
|
110
|
+
private _linkColor;
|
|
111
|
+
private _makeLabel;
|
|
112
|
+
/** All node rectangles, in input order. */
|
|
113
|
+
getNodes(): SankeyNode[];
|
|
114
|
+
/** All link ribbons, in input order. */
|
|
115
|
+
getLinks(): SankeyLink[];
|
|
116
|
+
/** The node with the given id, or `undefined`. */
|
|
117
|
+
getNode(id: string): SankeyNode | undefined;
|
|
118
|
+
/** The link at the given index, or `undefined`. */
|
|
119
|
+
getLink(index: number): SankeyLink | undefined;
|
|
120
|
+
copy(): SankeyDiagram;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=SankeyDiagram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SankeyDiagram.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/SankeyDiagram.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,12 @@
|
|
|
6
6
|
* with various layout algorithms.
|
|
7
7
|
*/
|
|
8
8
|
export type { VertexId, EdgeTuple, LayoutType, VertexStyleOptions, EdgeStyleOptions, VertexConfig, EdgeConfig, LayoutConfig, GenericGraphOptions, DiGraphOptions, } from './graphTypes';
|
|
9
|
-
export { computeLayout, computeCircularLayout } from './layoutAlgorithms';
|
|
9
|
+
export { computeLayout, computeCircularLayout, springLayoutStep, randomSpringPositions, springForceConstant, DEFAULT_SPRING_COOLING, type SpringPoint, type SpringStepParams, type SpringStepResult, } from './layoutAlgorithms';
|
|
10
|
+
export { ForceDirectedLayout, forceDirectedLayout, type ForceDirectedLayoutOptions, } from './ForceDirectedLayout';
|
|
10
11
|
export { GenericGraph } from './GenericGraph';
|
|
11
12
|
export { Graph } from './Graph';
|
|
12
13
|
export { DiGraph } from './DiGraph';
|
|
13
14
|
export { completeGraph, cycleGraph, pathGraph, starGraph, binaryTree, gridGraph, bipartiteGraph, } from './graphFactories';
|
|
15
|
+
export { SankeyDiagram, SankeyNode, SankeyLink, type SankeyDiagramOptions, type SankeyLinkColorMode, type SankeySpan, } from './SankeyDiagram';
|
|
16
|
+
export { computeSankeyLayout, orientPoint, type SankeyNodeInput, type SankeyLinkInput, type SankeyOrientation, type SankeyLayoutOptions, type NodeLayout, type LinkLayout, type SankeyLayout, } from './sankeyLayout';
|
|
14
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,0BAA0B,GAChC,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC"}
|
|
@@ -8,4 +8,58 @@ export declare function computeLayout(vertices: VertexId[], edges: EdgeTuple[],
|
|
|
8
8
|
* Circular layout: vertices equally spaced on a circle
|
|
9
9
|
*/
|
|
10
10
|
export declare function computeCircularLayout(vertices: VertexId[], positions: Map<VertexId, Vector3Tuple>, scale: number, center: Vector3Tuple): void;
|
|
11
|
+
/**
|
|
12
|
+
* A 2D point used by the spring (force-directed) simulation.
|
|
13
|
+
*/
|
|
14
|
+
export interface SpringPoint {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parameters for a single Fruchterman-Reingold step.
|
|
20
|
+
*/
|
|
21
|
+
export interface SpringStepParams {
|
|
22
|
+
/** Optimal edge length (the `k` constant in Fruchterman-Reingold). */
|
|
23
|
+
k: number;
|
|
24
|
+
/** Current temperature. It limits the maximum displacement per step. */
|
|
25
|
+
temperature: number;
|
|
26
|
+
/** Cooling factor applied to the temperature after the step. Default: 0.95. */
|
|
27
|
+
cooling?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Result of a single spring step: the next positions and the cooled temperature.
|
|
31
|
+
*/
|
|
32
|
+
export interface SpringStepResult {
|
|
33
|
+
/** The positions after the step. */
|
|
34
|
+
positions: Map<VertexId, SpringPoint>;
|
|
35
|
+
/** The temperature after cooling. */
|
|
36
|
+
temperature: number;
|
|
37
|
+
}
|
|
38
|
+
/** Default cooling factor for the spring (force-directed) simulation. */
|
|
39
|
+
export declare const DEFAULT_SPRING_COOLING = 0.95;
|
|
40
|
+
/**
|
|
41
|
+
* Compute the Fruchterman-Reingold force constant `k` for `n` vertices.
|
|
42
|
+
* It is the optimal distance between two vertices for the given `scale`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function springForceConstant(n: number, scale: number): number;
|
|
45
|
+
/**
|
|
46
|
+
* Create the initial spring positions for the vertices.
|
|
47
|
+
*
|
|
48
|
+
* Each vertex gets a position inside a box of side `scale * 2` around `center`.
|
|
49
|
+
* Pass a deterministic `random` function (0..1) for a repeatable layout.
|
|
50
|
+
*/
|
|
51
|
+
export declare function randomSpringPositions(vertices: VertexId[], scale: number, center: Vector3Tuple, random?: () => number): Map<VertexId, SpringPoint>;
|
|
52
|
+
/**
|
|
53
|
+
* Advance the spring (force-directed) simulation by one step.
|
|
54
|
+
*
|
|
55
|
+
* This is one Fruchterman-Reingold iteration. It computes repulsive forces
|
|
56
|
+
* between every pair of vertices and attractive forces along the edges. Then it
|
|
57
|
+
* moves each vertex by its net force, limited by the temperature. It returns a
|
|
58
|
+
* new positions map and the cooled temperature, so the caller holds the state.
|
|
59
|
+
*
|
|
60
|
+
* The function is pure. It reads `positions` and returns new positions. It does
|
|
61
|
+
* not change the input. Run it `iterations` times to reproduce
|
|
62
|
+
* `computeSpringLayout`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function springLayoutStep(vertices: VertexId[], edges: EdgeTuple[], positions: Map<VertexId, SpringPoint>, params: SpringStepParams): SpringStepResult;
|
|
11
65
|
//# sourceMappingURL=layoutAlgorithms.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layoutAlgorithms.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/layoutAlgorithms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/E;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,GACzC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAmD7B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GACnB,IAAI,CAUN"}
|
|
1
|
+
{"version":3,"file":"layoutAlgorithms.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/layoutAlgorithms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/E;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,SAAS,EAAE,EAClB,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,GACzC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAmD7B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GACnB,IAAI,CAUN;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,CAAC,EAAE,MAAM,CAAC;IACV,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtC,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,MAAM,GAAE,MAAM,MAAoB,GACjC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAS5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAAE,EACpB,KAAK,EAAE,SAAS,EAAE,EAClB,SAAS,EAAE,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,EACrC,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAgElB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Vector3Tuple } from '../../core/Mobject';
|
|
2
|
+
/**
|
|
3
|
+
* A node in a {@link SankeyDiagram}.
|
|
4
|
+
*
|
|
5
|
+
* `layer` fixes the column (0 = left-most for a horizontal diagram). When it is
|
|
6
|
+
* omitted for every node, the layout derives columns from the link direction.
|
|
7
|
+
*/
|
|
8
|
+
export interface SankeyNodeInput {
|
|
9
|
+
/** Unique node identifier, referenced by links. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Optional display label. Falls back to `id` when labels are shown. */
|
|
12
|
+
label?: string;
|
|
13
|
+
/** Optional explicit column index. */
|
|
14
|
+
layer?: number;
|
|
15
|
+
/** Optional CSS color for the node (and, by default, its outgoing links). */
|
|
16
|
+
color?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A directed flow between two nodes. `value` sets the link (ribbon) thickness.
|
|
20
|
+
*/
|
|
21
|
+
export interface SankeyLinkInput {
|
|
22
|
+
/** Source node id. */
|
|
23
|
+
source: string;
|
|
24
|
+
/** Target node id. */
|
|
25
|
+
target: string;
|
|
26
|
+
/** Flow magnitude. The ribbon thickness is proportional to this value. */
|
|
27
|
+
value: number;
|
|
28
|
+
}
|
|
29
|
+
/** Flow direction of the diagram. */
|
|
30
|
+
export type SankeyOrientation = 'horizontal' | 'vertical';
|
|
31
|
+
/** Tunable sizes used by {@link computeSankeyLayout}. */
|
|
32
|
+
export interface SankeyLayoutOptions {
|
|
33
|
+
/** Node thickness along the flow axis. */
|
|
34
|
+
nodeWidth: number;
|
|
35
|
+
/** Gap between stacked nodes in one column. */
|
|
36
|
+
nodePadding: number;
|
|
37
|
+
/** Distance between adjacent column centers. */
|
|
38
|
+
layerSpacing: number;
|
|
39
|
+
/** Target length of the tallest column (sum of its node lengths). */
|
|
40
|
+
height: number;
|
|
41
|
+
/** Minimum node length along the stacking axis. */
|
|
42
|
+
minNodeLength: number;
|
|
43
|
+
}
|
|
44
|
+
/** Computed geometry for one node, in horizontal (flow along +x) space. */
|
|
45
|
+
export interface NodeLayout {
|
|
46
|
+
id: string;
|
|
47
|
+
layer: number;
|
|
48
|
+
/** Center x of the node. */
|
|
49
|
+
x: number;
|
|
50
|
+
/** Top edge y (the larger y value). */
|
|
51
|
+
yTop: number;
|
|
52
|
+
/** Bottom edge y (the smaller y value). */
|
|
53
|
+
yBottom: number;
|
|
54
|
+
/** Node length along the stacking axis (`yTop - yBottom`). */
|
|
55
|
+
length: number;
|
|
56
|
+
/** `max(incoming total, outgoing total)`. */
|
|
57
|
+
throughput: number;
|
|
58
|
+
}
|
|
59
|
+
/** Computed geometry for one link, in horizontal (flow along +x) space. */
|
|
60
|
+
export interface LinkLayout {
|
|
61
|
+
index: number;
|
|
62
|
+
source: string;
|
|
63
|
+
target: string;
|
|
64
|
+
value: number;
|
|
65
|
+
/** Ribbon thickness. */
|
|
66
|
+
width: number;
|
|
67
|
+
/** Right edge x of the source node. */
|
|
68
|
+
sourceX: number;
|
|
69
|
+
sourceYTop: number;
|
|
70
|
+
sourceYBottom: number;
|
|
71
|
+
/** Left edge x of the target node. */
|
|
72
|
+
targetX: number;
|
|
73
|
+
targetYTop: number;
|
|
74
|
+
targetYBottom: number;
|
|
75
|
+
}
|
|
76
|
+
/** Full layout result. */
|
|
77
|
+
export interface SankeyLayout {
|
|
78
|
+
nodes: NodeLayout[];
|
|
79
|
+
links: LinkLayout[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Map a horizontal-space point to the requested orientation.
|
|
83
|
+
*
|
|
84
|
+
* Horizontal keeps the point. Vertical rotates it so columns run top to bottom,
|
|
85
|
+
* by the map `(x, y) -> (y, -x)`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function orientPoint(point: Vector3Tuple, orientation: SankeyOrientation): Vector3Tuple;
|
|
88
|
+
/**
|
|
89
|
+
* Compute a layered left-to-right Sankey layout in horizontal space.
|
|
90
|
+
*
|
|
91
|
+
* The caller maps the result to the final orientation with {@link orientPoint}.
|
|
92
|
+
* Node lengths and link widths share one scale, so a link width is proportional
|
|
93
|
+
* to its value. A node with unequal in and out totals is sized by the larger of
|
|
94
|
+
* the two. The function never throws for empty, single, or unlinked input.
|
|
95
|
+
*/
|
|
96
|
+
export declare function computeSankeyLayout(nodes: SankeyNodeInput[], links: SankeyLinkInput[], options: SankeyLayoutOptions): SankeyLayout;
|
|
97
|
+
//# sourceMappingURL=sankeyLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sankeyLayout.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graph/sankeyLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,UAAU,CAAC;AAE1D,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,GAAG,YAAY,CAK7F;AAoCD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EAAE,EACxB,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,EAAE,mBAAmB,GAC3B,YAAY,CA6Id"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Group } from '../../core/Group';
|
|
2
|
+
import { VGroup } from '../../core/VGroup';
|
|
3
|
+
import { Rectangle } from '../geometry/Rectangle';
|
|
4
|
+
import { Line } from '../geometry/Line';
|
|
5
|
+
import { Axes } from './Axes';
|
|
6
|
+
import { BoxSummary } from './stats';
|
|
7
|
+
/** Orientation of a box or violin plot. */
|
|
8
|
+
export type PlotOrientation = 'vertical' | 'horizontal';
|
|
9
|
+
/** Options for creating a BoxPlot. */
|
|
10
|
+
export interface BoxPlotOptions {
|
|
11
|
+
/** One data group (number[]) or several groups (number[][]). */
|
|
12
|
+
data: number[] | number[][];
|
|
13
|
+
/** Lay boxes along the x-axis ('vertical') or y-axis ('horizontal'). Default: 'vertical' */
|
|
14
|
+
orientation?: PlotOrientation;
|
|
15
|
+
/** Box color, or a per-group color array. Default: Manim color palette */
|
|
16
|
+
colors?: string | string[];
|
|
17
|
+
/** Fill opacity for the boxes. Default: 0.6 */
|
|
18
|
+
fillOpacity?: number;
|
|
19
|
+
/** Stroke width for box, median and whiskers. Default: 2 */
|
|
20
|
+
strokeWidth?: number;
|
|
21
|
+
/** Whisker length as a multiple of the IQR. Default: 1.5 */
|
|
22
|
+
whiskerFactor?: number;
|
|
23
|
+
/** Box thickness in category units. Default: 0.5 */
|
|
24
|
+
boxWidth?: number;
|
|
25
|
+
/** Radius of the outlier dots. Default: 0.05 */
|
|
26
|
+
outlierRadius?: number;
|
|
27
|
+
/** An existing Axes to draw onto. When omitted, one is built from the data. */
|
|
28
|
+
axes?: Axes;
|
|
29
|
+
/** Visual length of the x-axis when auto-building axes. Default: 8 */
|
|
30
|
+
xLength?: number;
|
|
31
|
+
/** Visual length of the y-axis when auto-building axes. Default: 6 */
|
|
32
|
+
yLength?: number;
|
|
33
|
+
/** Color for the axes when auto-building. Default: '#ffffff' */
|
|
34
|
+
axisColor?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* BoxPlot - a box-and-whisker plot for one or more data groups.
|
|
38
|
+
*
|
|
39
|
+
* Each group draws a box from Q1 to Q3 with a median line, whiskers that reach
|
|
40
|
+
* the most extreme values inside 1.5*IQR, and dots for the outliers beyond the
|
|
41
|
+
* whiskers. Groups sit side by side along the category axis.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const box = new BoxPlot({
|
|
46
|
+
* data: [[1, 2, 3, 4, 5, 100], [2, 3, 4, 5, 6]],
|
|
47
|
+
* orientation: 'vertical',
|
|
48
|
+
* });
|
|
49
|
+
* const summary = box.getSummary(0); // { q1, median, q3, whiskerLow, ... }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare class BoxPlot extends Group {
|
|
53
|
+
/** The coordinate system the boxes are drawn on. */
|
|
54
|
+
axes: Axes;
|
|
55
|
+
protected _groupsData: number[][];
|
|
56
|
+
protected _orientation: PlotOrientation;
|
|
57
|
+
protected _boxWidth: number;
|
|
58
|
+
protected _summaries: BoxSummary[];
|
|
59
|
+
protected _groupMobjects: VGroup[];
|
|
60
|
+
protected _boxes: (Rectangle | null)[];
|
|
61
|
+
protected _medianLines: (Line | null)[];
|
|
62
|
+
protected _whiskerGroups: VGroup[];
|
|
63
|
+
protected _outlierGroups: VGroup[];
|
|
64
|
+
constructor(options: BoxPlotOptions);
|
|
65
|
+
/** Padded value range covering every data value across all groups. */
|
|
66
|
+
private _valueRange;
|
|
67
|
+
/** Map a (category, value) pair to a world point, respecting orientation. */
|
|
68
|
+
private _toPoint;
|
|
69
|
+
/** Build the box, median, whiskers and outliers for one group. */
|
|
70
|
+
private _buildGroup;
|
|
71
|
+
/** Build the Q1..Q3 box rectangle for one group. */
|
|
72
|
+
private _buildBox;
|
|
73
|
+
/** A whisker stem from a box edge value to a whisker end value. */
|
|
74
|
+
private _stem;
|
|
75
|
+
/** A whisker cap: a short line perpendicular to the stem at a value. */
|
|
76
|
+
private _cap;
|
|
77
|
+
/** Get the coordinate system. */
|
|
78
|
+
getAxes(): Axes;
|
|
79
|
+
/** Get the computed summary for one group. */
|
|
80
|
+
getSummary(index: number): BoxSummary;
|
|
81
|
+
/** Get all group summaries. */
|
|
82
|
+
getSummaries(): BoxSummary[];
|
|
83
|
+
/** Get the mobject group for one data group. */
|
|
84
|
+
getGroup(index: number): VGroup | undefined;
|
|
85
|
+
/** Get the box rectangle for one group, or null for an empty group. */
|
|
86
|
+
getBox(index: number): Rectangle | null;
|
|
87
|
+
/** Get the median line for one group, or null for an empty group. */
|
|
88
|
+
getMedianLine(index: number): Line | null;
|
|
89
|
+
/** Get the whisker lines for one group. */
|
|
90
|
+
getWhiskers(index: number): VGroup | undefined;
|
|
91
|
+
/** Get the outlier dots for one group. */
|
|
92
|
+
getOutlierDots(index: number): VGroup | undefined;
|
|
93
|
+
/** The number of data groups. */
|
|
94
|
+
get numGroups(): number;
|
|
95
|
+
copy(): BoxPlot;
|
|
96
|
+
}
|
|
97
|
+
/** Normalize a one-group or many-group data argument to number[][]. */
|
|
98
|
+
export declare function normalizeGroups(data: number[] | number[][]): number[][];
|
|
99
|
+
//# sourceMappingURL=BoxPlot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoxPlot.d.ts","sourceRoot":"","sources":["../../../src/mobjects/graphing/BoxPlot.ts"],"names":[],"mappings":"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"}
|