From ec5a141a691e9e9e072295235b8ffa1571b92655 Mon Sep 17 00:00:00 2001 From: Lucas Vieira Date: Wed, 8 Jan 2025 13:04:03 -0300 Subject: [PATCH 01/35] simple bar chart using echartjs --- apps/api/src/python/visualization-v2.test.ts | 246 ++++++ apps/api/src/python/visualizations-v2.ts | 187 ++++ .../src/v1/workspaces/workspace/components.ts | 2 + apps/api/src/yjs/v2/documents.ts | 1 + apps/api/src/yjs/v2/executor/executor.ts | 29 + apps/api/src/yjs/v2/executor/visualization.ts | 80 ++ apps/api/src/yjs/v2/persistors.ts | 39 + apps/web/package.json | 1 + .../Dashboard/DashboardControls.tsx | 24 + .../components/Dashboard/DashboardView.tsx | 2 + .../src/components/Dashboard/GridElement.tsx | 21 + .../src/components/v2Editor/NewTabButton.tsx | 6 +- .../src/components/v2Editor/PlusButton.tsx | 2 +- .../customBlocks/visualizationV2/Combobox.tsx | 183 ++++ .../visualizationV2/FilterSelector.tsx | 804 ++++++++++++++++++ .../visualizationV2/MultiCombobox.tsx | 263 ++++++ .../visualizationV2/VisualizationControls.tsx | 662 ++++++++++++++ .../VisualizationSettingTabs.tsx | 46 + .../visualizationV2/VisualizationToggle.tsx | 47 + .../visualizationV2/VisualizationView.tsx | 290 +++++++ .../visualizationV2/YAxisPicker.tsx | 378 ++++++++ .../customBlocks/visualizationV2/index.tsx | 595 +++++++++++++ apps/web/src/components/v2Editor/index.tsx | 26 + apps/web/src/hooks/useYDoc.ts | 1 + packages/editor/src/blocks/index.ts | 19 + .../editor/src/blocks/visualization-v2.ts | 251 ++++++ packages/editor/src/execution/item.ts | 8 + packages/editor/src/execution/queue.ts | 1 + packages/editor/src/index.ts | 16 + packages/editor/src/operations/document.ts | 13 +- yarn.lock | 20 + 31 files changed, 4257 insertions(+), 6 deletions(-) create mode 100644 apps/api/src/python/visualization-v2.test.ts create mode 100644 apps/api/src/python/visualizations-v2.ts create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationToggle.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationView.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/YAxisPicker.tsx create mode 100644 apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx create mode 100644 packages/editor/src/blocks/visualization-v2.ts diff --git a/apps/api/src/python/visualization-v2.test.ts b/apps/api/src/python/visualization-v2.test.ts new file mode 100644 index 00000000..60f0ec57 --- /dev/null +++ b/apps/api/src/python/visualization-v2.test.ts @@ -0,0 +1,246 @@ +import * as services from '@jupyterlab/services' +import { DataFrame, DataFrameColumn, Output } from '@briefer/types' +import { createVisualizationV2 } from './visualizations-v2' +import { JupyterManager } from '../jupyter/manager' +import { getVar } from '../config' +import { executeCode } from './index.js' +import { + VisualizationV2BlockInput, + VisualizationV2BlockOutputResult, +} from '@briefer/editor' + +const manager = new JupyterManager( + 'http', + 'localhost', + 8888, + getVar('JUPYTER_TOKEN') +) + +async function getPythonRunner( + workspaceId: string, + sessionId: string +): Promise<{ dispose: () => Promise; runPython: typeof executeCode }> { + const serverSettings = await manager.getServerSettings(workspaceId) + const kernelManager = new services.KernelManager({ + serverSettings, + }) + const sessionManager = new services.SessionManager({ + kernelManager, + serverSettings, + }) + + const session = await sessionManager.startNew({ + path: sessionId, + type: 'notebook', + name: sessionId, + kernel: { name: 'python' }, + }) + + const kernel = session.kernel + if (!kernel) { + session.dispose() + throw new Error(`Got null kernel for session ${sessionId}`) + } + + return { + dispose: async () => { + await kernel.shutdown() + session.dispose() + }, + runPython: async function runPython( + _workspaceId: string, + _sessionId: string, + code: string, + onOutputs: (outputs: Output[]) => void, + opts: { storeHistory: boolean } + ): ReturnType { + const future = kernel.requestExecute({ + code, + allow_stdin: true, + store_history: opts.storeHistory, + }) + + future.onIOPub = (message) => { + switch (message.header.msg_type) { + case 'stream': + if ('name' in message.content) { + console.log(message.content.text) + onOutputs([ + { + type: 'stdio', + name: message.content.name, + text: message.content.text, + }, + ]) + break + } + case 'error': + if ( + 'ename' in message.content && + 'evalue' in message.content && + 'traceback' in message.content + ) { + onOutputs([ + { + type: 'error', + ename: message.content.ename, + evalue: message.content.evalue, + traceback: message.content.traceback, + }, + ]) + } + } + } + + return { + abort: async () => {}, + promise: future.done.then(() => {}), + } + }, + } +} + +describe('.createVisualizationV2', () => { + let pythonRunner: Awaited> + + beforeEach(async () => { + pythonRunner = await getPythonRunner('workspaceId', 'sessionId') + }) + + afterEach(async () => { + await pythonRunner.dispose() + }) + + it('should return dataframe-not-found error', async () => { + const result = await ( + await createVisualizationV2( + 'workspaceId', + 'sessionId', + { name: 'notFound', columns: [] }, + { + dataframeName: 'notFound', + chartType: 'groupedColumn', + xAxis: null, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: null, + yAxes: [], + }, + manager, + pythonRunner.runPython + ) + ).promise + + expect(result).toEqual({ + success: false, + reason: 'dataframe-not-found', + }) + }) + + const code = `import pandas as pd +df = pd.DataFrame({ + 'integers': [1, 2, 3], + 'datetimes': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03']), +})` + + const integersDFColumn: DataFrameColumn = { + type: 'int', + name: 'integers', + } + + const datetimesDFColumn: DataFrameColumn = { + type: 'datetime64', + name: 'datetimes', + } + + const df: DataFrame = { + name: 'df', + columns: [integersDFColumn, datetimesDFColumn], + } + + const cases: { + name: string + input: VisualizationV2BlockInput + result: VisualizationV2BlockOutputResult + }[] = [ + { + name: 'datetime by integer groupedColumn', + input: { + dataframeName: 'df', + chartType: 'groupedColumn', + xAxis: datetimesDFColumn, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: null, + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + xAxis: [ + { + data: [1, 2, 3], + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + data: [1, 2, 3], + type: 'bar', + }, + ], + }, + }, + ] + + for (const test of cases) { + it(test.name, async () => { + await ( + await pythonRunner.runPython( + 'workspaceId', + 'sessionId', + code, + () => {}, + { + storeHistory: true, + } + ) + ).promise + + const result = await ( + await createVisualizationV2( + 'workspaceId', + 'sessionId', + df, + test.input, + manager, + pythonRunner.runPython + ) + ).promise + + expect(result.success).toBe(true) + if (result.success) { + expect(result.output.result).toEqual(result) + } + }) + } + + afterAll(async () => { + await manager.stop() + }) +}) diff --git a/apps/api/src/python/visualizations-v2.ts b/apps/api/src/python/visualizations-v2.ts new file mode 100644 index 00000000..64a7697c --- /dev/null +++ b/apps/api/src/python/visualizations-v2.ts @@ -0,0 +1,187 @@ +import { + Output, + DataFrame, + exhaustiveCheck, + PythonErrorOutput, + jsonString, +} from '@briefer/types' +import { executeCode, PythonExecutionError } from './index.js' +import { IJupyterManager } from '../jupyter/index.js' +import { + VisualizationV2BlockInput, + VisualizationV2BlockOutput, +} from '@briefer/editor' +import AggregateError from 'aggregate-error' +import { z } from 'zod' + +function getCode(dataframe: DataFrame, input: VisualizationV2BlockInput) { + const strInput = JSON.stringify(input) + let code = `import json +from datetime import datetime + +def _briefer_create_visualization(df, options): + x_axis = [{ + "type": "category", + "data": df[options["xAxis"]["name"]].tolist() + }] + y_axis = [] + batata = [] + + for y_axis_options in options["yAxes"]: + y_axis.append({ + "type": "value", + }) + for series_options in y_axis_options["series"]: + batata.append({ + "type": "bar", + "data": df[series_options["column"]["name"]].tolist() + }) + + print(json.dumps({ + "success": True, + "output": { + "executedAt": datetime.now().isoformat(), + "result":{ + "xAxis": x_axis, + "yAxis": y_axis, + "series": batata + } + } + })) + + +if "${dataframe.name}" in globals(): + df = ${dataframe.name}.copy() + options = json.loads(${JSON.stringify(strInput)}) + _briefer_create_visualization(df, options) +else: + print(json.dumps({"success": False, "reason": "dataframe-not-found"}))` + + return code +} + +const CreateVisualizationResult = z.union([ + z.object({ + success: z.literal(true), + output: VisualizationV2BlockOutput, + }), + z.object({ + success: z.literal(false), + reason: z.union([ + z.literal('dataframe-not-found'), + z.literal('aborted'), + z.literal('invalid-params'), + ]), + }), +]) +type CreateVisualizationResult = z.infer + +export type CreateVisualizationTask = { + promise: Promise + abort: () => Promise +} + +export async function createVisualizationV2( + workspaceId: string, + sessionId: string, + dataframe: DataFrame, + input: VisualizationV2BlockInput, + jupyterManager: IJupyterManager, + executePython: typeof executeCode +): Promise { + await jupyterManager.ensureRunning(workspaceId) + + const code = getCode(dataframe, input) + + let outputs: Output[] = [] + const { promise: execute, abort } = await executePython( + workspaceId, + sessionId, + code, + (newOutputs) => { + outputs = outputs.concat(newOutputs) + }, + { storeHistory: false } + ) + + const promise = execute.then((): CreateVisualizationResult => { + let result: CreateVisualizationResult | null = null + const pythonErrors: PythonErrorOutput[] = [] + const outputParsingErrors: Error[] = [] + for (const output of outputs) { + switch (output.type) { + case 'html': + break + case 'error': + pythonErrors.push(output) + break + case 'stdio': + switch (output.name) { + case 'stdout': + for (const line of output.text.split('\n')) { + if (!result?.success) { + try { + console.log(line) + console.log(line) + console.log(JSON.parse(line)) + } catch (e) { + console.log(e) + } + + const parsed = jsonString + .pipe(CreateVisualizationResult) + .safeParse(line.trim()) + if (parsed.success) { + result = parsed.data + } else { + outputParsingErrors.push(parsed.error) + } + } + } + break + case 'stderr': + console.error(output.text) + break + default: + exhaustiveCheck(output.name) + } + break + case 'image': + break + case 'plotly': + break + default: + exhaustiveCheck(output) + } + } + + if ( + (pythonErrors.length > 0 || outputParsingErrors.length > 0) && + result === null + ) { + throw new AggregateError([ + ...pythonErrors.map( + (err) => + new PythonExecutionError( + err.type, + err.ename, + err.evalue, + err.traceback + ) + ), + ...outputParsingErrors, + ]) + } + + if (result === null) { + throw new Error('Got no output back from running createVisualizationV2') + } + + return result + }) + + return { + promise, + abort, + } +} diff --git a/apps/api/src/v1/workspaces/workspace/components.ts b/apps/api/src/v1/workspaces/workspace/components.ts index 5a6e25c4..b5a202da 100644 --- a/apps/api/src/v1/workspaces/workspace/components.ts +++ b/apps/api/src/v1/workspaces/workspace/components.ts @@ -68,6 +68,7 @@ export default function componentsRouter(socketServer: IOServer) { block.setAttribute('componentId', component.id), onRichText: () => {}, onVisualization: () => {}, + onVisualizationV2: () => {}, onInput: () => {}, onDropdownInput: () => {}, onDateInput: () => {}, @@ -276,6 +277,7 @@ async function updateReusableComponentInstanceOld( block.getAttribute('componentId') === component.id, onRichText: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onInput: () => false, onDropdownInput: () => false, onDateInput: () => false, diff --git a/apps/api/src/yjs/v2/documents.ts b/apps/api/src/yjs/v2/documents.ts index 5196b8ca..8a87bdb3 100644 --- a/apps/api/src/yjs/v2/documents.ts +++ b/apps/api/src/yjs/v2/documents.ts @@ -173,6 +173,7 @@ export async function duplicateDocument( onPython: (block) => block.getAttribute('componentId'), onRichText: () => null, onVisualization: () => null, + onVisualizationV2: () => null, onInput: () => null, onDropdownInput: () => null, onDateInput: () => null, diff --git a/apps/api/src/yjs/v2/executor/executor.ts b/apps/api/src/yjs/v2/executor/executor.ts index 58632a77..9ad597cc 100644 --- a/apps/api/src/yjs/v2/executor/executor.ts +++ b/apps/api/src/yjs/v2/executor/executor.ts @@ -34,6 +34,9 @@ import { ExecutionQueueItemWritebackMetadata, isWritebackBlock, isTextInputBlock, + ExecutionQueueItemVisualizationV2Metadata, + isVisualizationV2Block, + VisualizationV2Block, } from '@briefer/editor' import { IPythonExecutor, PythonExecutor } from './python.js' import { logger } from '../../../logger.js' @@ -343,6 +346,9 @@ export class Executor { case 'visualization': await this.visExecutor.run(item, data.block, data.metadata, events) break + case 'visualization-v2': + await this.visExecutor.runV2(item, data.block, data.metadata, events) + break case 'text-input-save-value': await this.textInputExecutor.saveValue(item, data.block, data.metadata) break @@ -470,6 +476,24 @@ export class Executor { return { _tag: 'visualization', metadata, block } } + case 'visualization-v2': { + if (!isVisualizationV2Block(block)) { + logger().error( + { + port: process.env['PORT'], + id: this.id, + docId: this.docId, + workspaceId: this.workspaceId, + documentId: this.documentId, + blockId: item.getBlockId(), + }, + 'Got wrong block type for visualization execution' + ) + return null + } + + return { _tag: 'visualization-v2', metadata, block } + } case 'text-input-save-value': case 'text-input-rename-variable': { if (!isTextInputBlock(block)) { @@ -618,6 +642,11 @@ type ExecutionItemData = metadata: ExecutionQueueItemVisualizationMetadata block: Y.XmlElement } + | { + _tag: 'visualization-v2' + metadata: ExecutionQueueItemVisualizationV2Metadata + block: Y.XmlElement + } | { _tag: 'text-input-save-value' metadata: ExecutionQueueItemTextInputSaveValueMetadata diff --git a/apps/api/src/yjs/v2/executor/visualization.ts b/apps/api/src/yjs/v2/executor/visualization.ts index 7fe0578c..86202b53 100644 --- a/apps/api/src/yjs/v2/executor/visualization.ts +++ b/apps/api/src/yjs/v2/executor/visualization.ts @@ -1,8 +1,11 @@ import { ExecutionQueueItem, ExecutionQueueItemVisualizationMetadata, + ExecutionQueueItemVisualizationV2Metadata, VisualizationBlock, getVisualizationAttributes, + getVisualizationV2Attributes, + VisualizationV2Block, } from '@briefer/editor' import * as Y from 'yjs' import { logger } from '../../../logger.js' @@ -12,14 +15,18 @@ import { parseOrElse, } from '@briefer/types' import { createVisualization } from '../../../python/visualizations.js' +import { createVisualizationV2 } from '../../../python/visualizations-v2.js' import { z } from 'zod' import { VisEvents } from '../../../events/index.js' import { WSSharedDocV2 } from '../index.js' import { advanceTutorial } from '../../../tutorials.js' import { broadcastTutorialStepStates } from '../../../websocket/workspace/tutorial.js' +import { getJupyterManager } from '../../../jupyter/index.js' +import { executeCode } from '../../../python/index.js' export type VisualizationEffects = { createVisualization: typeof createVisualization + createVisualizationV2: typeof createVisualizationV2 advanceTutorial: typeof advanceTutorial broadcastTutorialStepStates: ( workspaceId: string, @@ -34,6 +41,12 @@ export interface IVisualizationExecutor { metadata: ExecutionQueueItemVisualizationMetadata, events: VisEvents ): Promise + runV2( + executionItem: ExecutionQueueItem, + block: Y.XmlElement, + metadata: ExecutionQueueItemVisualizationV2Metadata, + events: VisEvents + ): Promise } export class VisualizationExecutor implements IVisualizationExecutor { @@ -219,6 +232,72 @@ export class VisualizationExecutor implements IVisualizationExecutor { } } + public async runV2( + executionItem: ExecutionQueueItem, + block: Y.XmlElement, + _metadata: ExecutionQueueItemVisualizationV2Metadata, + events: VisEvents + ) { + try { + logger().trace( + { + sessionId: this.sessionId, + workspaceId: this.workspaceId, + documentId: this.documentId, + blockId: block.getAttribute('id'), + }, + 'running visualization v2 block' + ) + + const attrs = getVisualizationV2Attributes(block) + if (!attrs.input.dataframeName) { + block.setAttribute('error', 'dataframe-not-set') + executionItem.setCompleted('error') + return + } + + const dataframe = this.dataframes.get(attrs.input.dataframeName) + if (!dataframe) { + block.setAttribute('error', 'dataframe-not-found') + executionItem.setCompleted('error') + return + } + + const { promise, abort } = await this.effects.createVisualizationV2( + this.workspaceId, + this.sessionId, + dataframe, + attrs.input, + getJupyterManager(), + executeCode + ) + + const result = await promise + events.visUpdate(attrs.input.chartType) + + if (result.success) { + console.log(result.output) + block.setAttribute('output', result.output) + } else { + } + executionItem.setCompleted('success') + } catch (err) { + logger().error( + { + sessionId: this.sessionId, + workspaceId: this.workspaceId, + documentId: this.documentId, + blockId: block.getAttribute('id'), + err, + }, + 'Failed to run visualization v2 block' + ) + + block.setAttribute('error', 'unknown') + executionItem.setCompleted('error') + } + } + public static fromWSSharedDocV2(doc: WSSharedDocV2) { return new VisualizationExecutor( doc.id, @@ -227,6 +306,7 @@ export class VisualizationExecutor implements IVisualizationExecutor { doc.dataframes, { createVisualization, + createVisualizationV2, advanceTutorial, broadcastTutorialStepStates: ( workspaceId: string, diff --git a/apps/api/src/yjs/v2/persistors.ts b/apps/api/src/yjs/v2/persistors.ts index 1cabc595..742b2b83 100644 --- a/apps/api/src/yjs/v2/persistors.ts +++ b/apps/api/src/yjs/v2/persistors.ts @@ -30,6 +30,7 @@ import { equals, omit } from 'ramda' import { uuidv4 } from 'lib0/random.js' import { WritebackBlock } from '@briefer/editor/types/blocks/writeback.js' import { acquireLock } from '../../lock.js' +import { VisualizationV2Block } from '@briefer/editor/types/blocks/visualization-v2.js' export type LoadStateResult = { ydoc: Y.Doc @@ -564,6 +565,7 @@ export class AppPersistor implements Persistor { }, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -579,6 +581,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: (nextBlock) => this.isSQLBlockAcceptable(prevBlock, nextBlock), onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -595,6 +598,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -610,6 +614,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: (nextBlock) => @@ -627,6 +632,24 @@ export class AppPersistor implements Persistor { onSQL: () => false, onVisualization: (nextBlock) => this.isVisualizationBlockAcceptable(prevBlock, nextBlock), + onVisualizationV2: () => false, + onFileUpload: () => false, + onDashboardHeader: () => false, + onWriteback: () => false, + onPivotTable: () => false, + }) + }, + onVisualizationV2: (prevBlock) => { + return switchBlockType(nextBlock, { + onInput: () => false, + onDropdownInput: () => false, + onDateInput: () => false, + onPython: () => false, + onRichText: () => false, + onSQL: () => false, + onVisualization: () => false, + onVisualizationV2: (nextBlock) => + this.isVisualizationV2BlockAcceptable(prevBlock, nextBlock), onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -643,6 +666,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -659,6 +683,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -680,6 +705,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -695,6 +721,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: (nextBlock) => this.isFileUploadBlockAcceptable(prevBlock, nextBlock), onDashboardHeader: () => false, @@ -711,6 +738,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: (nextBlock) => this.isDashboardHeaderBlockAcceptable(prevBlock, nextBlock), @@ -727,6 +755,7 @@ export class AppPersistor implements Persistor { onRichText: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onFileUpload: () => false, onDashboardHeader: () => false, onWriteback: () => false, @@ -799,6 +828,16 @@ export class AppPersistor implements Persistor { return equals(prevAttributes, nextAttributes) } + private isVisualizationV2BlockAcceptable( + prevBlock: Y.XmlElement, + nextBlock: Y.XmlElement + ): boolean { + const prevAttributes = prevBlock.getAttributes() + const nextAttributes = nextBlock.getAttributes() + + return equals(prevAttributes, nextAttributes) + } + private isInputBlockAcceptable( prevBlock: Y.XmlElement, nextBlock: Y.XmlElement diff --git a/apps/web/package.json b/apps/web/package.json index f299c691..3a65513f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -67,6 +67,7 @@ "date-fns-tz": "^3.1.3", "dexie": "^4.0.8", "dompurify": "^3.0.8", + "echarts": "^5.6.0", "express": "^4.18.2", "fast-diff": "^1.3.0", "fastest-levenshtein": "^1.0.16", diff --git a/apps/web/src/components/Dashboard/DashboardControls.tsx b/apps/web/src/components/Dashboard/DashboardControls.tsx index 26911ea6..f48340c9 100644 --- a/apps/web/src/components/Dashboard/DashboardControls.tsx +++ b/apps/web/src/components/Dashboard/DashboardControls.tsx @@ -40,6 +40,7 @@ import { Heading1Icon } from 'lucide-react' import { v4 as uuidv4 } from 'uuid' import { getDefaults } from './DashboardView' import PivotTableBlock from '../v2Editor/customBlocks/pivotTable' +import VisualizationV2Block from '../v2Editor/customBlocks/visualizationV2' interface Props { document: ApiDocument @@ -134,6 +135,7 @@ function DashboardControls(props: Props) { return block }, onVisualization: (_) => block, + onVisualizationV2: (_) => block, onInput: (_) => block, onDropdownInput: (_) => block, onDateInput: (_) => block, @@ -375,6 +377,28 @@ function BlockListItem(props: BlockListItemProps) { /> ), + onVisualizationV2: (block) => ( +
+ {}} + isDashboard={true} + isPublicMode={false} + hasMultipleTabs={false} + isBlockHiddenInPublished={false} + onToggleIsBlockHiddenInPublished={() => {}} + isCursorWithin={false} + isCursorInserting={false} + userId={props.userId} + executionQueue={props.executionQueue} + /> +
+ ), onInput: (block) => ( ), + onVisualizationV2: (block) => ( + {}} + isDashboard={true} + isPublicMode={false} + hasMultipleTabs={false} + isBlockHiddenInPublished={false} + onToggleIsBlockHiddenInPublished={() => {}} + isCursorWithin={false} + isCursorInserting={false} + userId={props.userId} + executionQueue={props.executionQueue} + /> + ), onPivotTable: (block) => ( , }, @@ -111,14 +111,14 @@ function NewTabButton(props: Props) { props.lastBlockId, { type: item.type, - dataSourceId: - props.dataSources.get(0)?.config.data.id ?? null, + dataSourceId: props.dataSources.get(0)?.config.data.id ?? null, isFileDataSource: false, }, 'after' ) break case BlockType.Visualization: + case BlockType.VisualizationV2: addGroupedBlock( props.layout, props.blocks, diff --git a/apps/web/src/components/v2Editor/PlusButton.tsx b/apps/web/src/components/v2Editor/PlusButton.tsx index b483cbc9..1a5c1075 100644 --- a/apps/web/src/components/v2Editor/PlusButton.tsx +++ b/apps/web/src/components/v2Editor/PlusButton.tsx @@ -122,7 +122,7 @@ function BlockList(props: BlockListProps) { props.onAddBlock(BlockType.Python) }, [props.onAddBlock]) const onAddVisualization = useCallback(() => { - props.onAddBlock(BlockType.Visualization) + props.onAddBlock(BlockType.VisualizationV2) }, [props.onAddBlock]) const onAddPivotTable = useCallback(() => { props.onAddBlock(BlockType.PivotTable) diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx new file mode 100644 index 00000000..f3c29e42 --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx @@ -0,0 +1,183 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { CheckIcon, ChevronUpDownIcon } from '@heroicons/react/20/solid' +import { Transition } from '@headlessui/react' +import clsx from 'clsx' +import ReactDOM from 'react-dom' +import useDropdownPosition from '@/hooks/dropdownPosition' + +interface Props { + label?: string | JSX.Element + value: T | null + options: T[] + onChange: (value: T | null) => void + search: (options: T[], query: string) => T[] + getLabel: (value: T) => string + icon: (value: T) => React.ReactNode + placeholder: string + fetchOptions?: (query: string) => Promise + loadingOptions?: boolean + disabled?: boolean +} + +export default function Combobox(props: Props) { + const [query, setQuery] = useState(null) + const buttonRef = useRef(null) + const inputContainerRef = useRef(null) + + const filteredColumns = useMemo(() => { + return query === null || query === '' + ? props.options + : props.search(props.options, query) + }, [query, props.options, props.search]) + + useEffect(() => { + if (filteredColumns.length < 5 && props.fetchOptions) { + props.fetchOptions(query ?? '') + } + }, [query, filteredColumns, props.fetchOptions]) + + const menuRef = useRef(null) + const [open, setOpen] = useState(false) + const { onOpen, dropdownPosition } = useDropdownPosition(inputContainerRef) + const onClickButton = useCallback(() => { + if (!props.disabled) { + setOpen(true) + onOpen() + } + }, [props.disabled, onOpen]) + useEffect(() => { + if (!open) { + return + } + + const onClickOutside = (e: MouseEvent) => { + if ( + inputContainerRef.current && + !inputContainerRef.current.contains(e.target as Node) && + menuRef.current && + !menuRef.current.contains(e.target as Node) + ) { + e.preventDefault() + e.stopImmediatePropagation() + e.stopPropagation() + setOpen(false) + } + } + + document.addEventListener('click', onClickOutside) + return () => { + document.removeEventListener('click', onClickOutside) + } + }, [inputContainerRef, menuRef, open]) + + return ( +
+ {props.label && typeof props.label === 'string' ? ( +
+ {props.label} +
+ ) : ( + props.label + )} +
+
+ {props.value && props.icon(props.value)} + setQuery(event.target.value)} + placeholder={props.placeholder} + onClick={(e) => { + if (!open) { + e.preventDefault() + buttonRef.current?.click() + } + }} + onFocus={(e) => { + if (!open) { + e.preventDefault() + buttonRef.current?.click() + setQuery('') + } + }} + onBlur={(e) => { + e.preventDefault() + setTimeout(() => setQuery(null), 200) + }} + value={query ?? (props.value ? props.getLabel(props.value) : '')} + /> +
+ + + {ReactDOM.createPortal( + +
+ {filteredColumns.map((c, i) => ( + + ))} + {props.loadingOptions && ( +
Loading...
+ )} +
+
, + document.body + )} +
+
+ ) +} diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx new file mode 100644 index 00000000..f766e7ca --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx @@ -0,0 +1,804 @@ +import { + useCallback, + useState, + useEffect, + ChangeEventHandler, + useMemo, + useRef, +} from 'react' +import { + DataFrameColumn, + VisualizationDateFilterOperator, + VisualizationNumberFilterOperator, + VisualizationStringFilterOperator, + numberFilterOperators, + stringFilterOperators, + dateFilterOperators, + VisualizationNumberFilter, + VisualizationStringFilter, + VisualizationDateFilter, + toDate, + DataFrame, + VisualizationFilter, + NumpyNumberTypes, + NumpyStringTypes, + NumpyJsonTypes, + NumpyDateTypes, + NumpyBoolTypes, + VisualizationStringFilterMultiValuesOperator, + NumpyTimeDeltaTypes, + PythonErrorOutput, + InvalidReason, + getInvalidReason, +} from '@briefer/types' +import { Transition } from '@headlessui/react' +import { InformationCircleIcon, XMarkIcon } from '@heroicons/react/20/solid' +import AxisSelector from '../../../AxisSelector' +import Combobox from './Combobox' +import clsx from 'clsx' +import MultiCombobox from './MultiCombobox' +import { preventPropagation } from '@/utils/events' +import { equals, identity } from 'ramda' +import ReactDOM from 'react-dom' +import useDropdownPosition from '@/hooks/dropdownPosition' +import { z } from 'zod' +import { Tooltip } from '@/components/Tooltips' + +function isNumberOperator( + operator: + | VisualizationNumberFilterOperator + | VisualizationStringFilterOperator + | VisualizationDateFilterOperator +): operator is VisualizationNumberFilterOperator { + return VisualizationNumberFilterOperator.safeParse(operator).success +} + +function isStringOperator( + operator: + | VisualizationNumberFilterOperator + | VisualizationStringFilterOperator + | VisualizationDateFilterOperator +): operator is VisualizationStringFilterOperator { + return VisualizationStringFilterOperator.safeParse(operator).success +} + +function isDateOperator( + operator: + | VisualizationNumberFilterOperator + | VisualizationStringFilterOperator + | VisualizationDateFilterOperator +): operator is VisualizationDateFilterOperator { + return VisualizationDateFilterOperator.safeParse(operator).success +} + +function numberOperatorSymbol( + operator: VisualizationNumberFilterOperator +): string { + switch (operator) { + case 'eq': + return '=' + case 'ne': + return '!=' + case 'gt': + return '>' + case 'lt': + return '<' + case 'gte': + return '>=' + case 'lte': + return '<=' + case 'isNull': + return 'is null' + case 'isNotNull': + return 'is not null' + } +} +function numberOperatorLabel( + operator: VisualizationNumberFilterOperator +): string { + switch (operator) { + case 'eq': + return 'Equals' + case 'ne': + return 'Not Equals' + case 'gt': + return 'Greater Than' + case 'lt': + return 'Less Than' + case 'gte': + return 'Greater Than or Equals' + case 'lte': + return 'Less Than or Equals' + case 'isNull': + return 'Is Null' + case 'isNotNull': + return 'Is Not Null' + } +} + +function stringOperatorSymbol( + operator: VisualizationStringFilterOperator +): string { + switch (operator) { + case 'eq': + return '=' + case 'ne': + return '!=' + case 'contains': + return 'contains' + case 'notContains': + return 'not contains' + case 'startsWith': + return 'starts with' + case 'endsWith': + return 'ends with' + case 'in': + return 'in' + case 'notIn': + return 'not in' + case 'isNull': + return 'is null' + case 'isNotNull': + return 'is not null' + } +} +function stringOperatorLabel( + operator: VisualizationStringFilterOperator +): string { + switch (operator) { + case 'eq': + return 'Equals' + case 'ne': + return 'Not Equals' + case 'contains': + return 'Contains' + case 'notContains': + return 'Not Contains' + case 'startsWith': + return 'Starts With' + case 'endsWith': + return 'Ends With' + case 'in': + return 'In' + case 'notIn': + return 'Not In' + case 'isNull': + return 'Is Null' + case 'isNotNull': + return 'Is Not Null' + } +} + +function dateOperatorSymbol(operator: VisualizationDateFilterOperator): string { + switch (operator) { + case 'eq': + return '=' + case 'ne': + return '!=' + case 'before': + return '<' + case 'after': + return '>' + case 'beforeOrEq': + return '<=' + case 'afterOrEq': + return '>=' + case 'isNull': + return 'is null' + case 'isNotNull': + return 'is not null' + } +} +function dateOperatorLabel(operator: VisualizationDateFilterOperator): string { + switch (operator) { + case 'eq': + return 'Equals' + case 'ne': + return 'Not Equals' + case 'before': + return 'Before' + case 'after': + return 'After' + case 'beforeOrEq': + return 'Before or Equals' + case 'afterOrEq': + return 'After or Equals' + case 'isNull': + return 'Is Null' + case 'isNotNull': + return 'Is Not Null' + } +} + +function getOperatorLabel( + operator: + | VisualizationStringFilterOperator + | VisualizationNumberFilterOperator + | VisualizationDateFilterOperator +): string { + if (isNumberOperator(operator)) { + return numberOperatorLabel(operator) + } + + if (isStringOperator(operator)) { + return stringOperatorLabel(operator) + } + + return dateOperatorLabel(operator) +} + +function searchOperator< + T extends + | VisualizationNumberFilterOperator + | VisualizationStringFilterOperator + | VisualizationDateFilterOperator +>(options: T[], query: string): T[] { + return options.filter((c) => { + if (isNumberOperator(c)) { + return ( + numberOperatorLabel(c).toLowerCase().includes(query.toLowerCase()) || + numberOperatorSymbol(c).toLowerCase().includes(query.toLowerCase()) + ) + } + + if (isStringOperator(c)) { + return ( + stringOperatorLabel(c).toLowerCase().includes(query.toLowerCase()) || + stringOperatorSymbol(c).toLowerCase().includes(query.toLowerCase()) + ) + } + + return ( + dateOperatorLabel(c).toLowerCase().includes(query.toLowerCase()) || + dateOperatorSymbol(c).toLowerCase().includes(query.toLowerCase()) + ) + }) +} + +function getOperatorOptions(columnType: DataFrameColumn['type']) { + if (NumpyNumberTypes.or(NumpyTimeDeltaTypes).safeParse(columnType).success) { + return numberFilterOperators + } + + if (NumpyStringTypes.or(NumpyJsonTypes).safeParse(columnType).success) { + return stringFilterOperators + } + + if (NumpyDateTypes.safeParse(columnType).success) { + return dateFilterOperators + } + + // TODO: add filtering capabilities for boolean types + if (NumpyBoolTypes.safeParse(columnType).success) { + return [] + } + + // TODO: this should never happen, we should be alerted + return [] +} + +type Operator = + | VisualizationStringFilterOperator + | VisualizationNumberFilterOperator + | VisualizationDateFilterOperator + +interface Props { + dataframe: Pick + filter: VisualizationFilter + onChange: (filter: VisualizationFilter) => void + onRemove: (filter: VisualizationFilter) => void + isInvalid: boolean + disabled?: boolean +} +function FilterSelector(props: Props) { + const onRemove = useCallback(() => { + props.onRemove(props.filter) + }, [props.onRemove, props.filter]) + + const [column, setColumn] = useState( + props.filter.column + ) + + const [operator, setOperator] = useState( + props.filter.operator + ) + + const [value, setValue] = useState( + Array.isArray(props.filter.value) + ? props.filter.value + : props.filter.value?.toString() ?? + (props.filter.operator + ? ['in', 'notIn'].includes(props.filter.operator) + ? [] + : '' + : '') + ) + + const renderedValue = useMemo(() => { + const renderedValue = z + .object({ renderedValue: z.union([z.string(), z.array(z.string())]) }) + .safeParse(props.filter) + if (renderedValue.success) { + return renderedValue.data.renderedValue + } + + return undefined + }, [props.filter]) + + const renderError = useMemo(() => { + const renderError = z + .object({ renderError: PythonErrorOutput }) + .safeParse(props.filter) + if (renderError.success) { + return renderError.data.renderError + } + + return undefined + }, [props.filter]) + + const onChangeValue: ChangeEventHandler = useCallback( + (event) => { + setValue(event.target.value) + }, + [setValue] + ) + + useEffect(() => { + if (!column || !operator) { + return + } + + if ( + NumpyNumberTypes.or(NumpyTimeDeltaTypes).safeParse(column.type).success + ) { + if (!isNumberOperator(operator)) { + setOperator('eq') + } + return + } + + if (NumpyStringTypes.or(NumpyJsonTypes).safeParse(column.type).success) { + if (!isStringOperator(operator)) { + setOperator('eq') + } + return + } + + if (NumpyDateTypes.safeParse(column.type).success) { + if (!isDateOperator(operator)) { + setOperator('eq') + } + return + } + }, [column, operator]) + + useEffect(() => { + if (!column || !operator) { + return + } + + const didChange = + !equals(props.filter.column, column) || + props.filter.operator !== operator || + !equals(props.filter.value, value) + if (!didChange) { + return + } + + const timeout = setTimeout(() => { + if ( + NumpyNumberTypes.or(NumpyTimeDeltaTypes).safeParse(column.type).success + ) { + if (isNumberOperator(operator)) { + const filter = VisualizationNumberFilter.safeParse({ + id: props.filter.id, + column, + operator, + value: value.toString(), + }) + if (filter.success) { + props.onChange(filter.data) + return + } + } + } + + if (NumpyStringTypes.or(NumpyJsonTypes).safeParse(column.type).success) { + if (isStringOperator(operator)) { + const filter = VisualizationStringFilter.safeParse({ + id: props.filter.id, + column, + operator, + value, + }) + if (filter.success) { + props.onChange(filter.data) + return + } + } + } + + if (NumpyDateTypes.safeParse(column.type).success) { + if (isDateOperator(operator)) { + const filter = VisualizationDateFilter.safeParse({ + id: props.filter.id, + column, + operator, + value: toDate(value.toString())?.toISOString() ?? value, + }) + if (filter.success) { + props.onChange(filter.data) + return + } + } + } + + props.onChange({ + type: 'unfinished-visualization-filter', + id: props.filter.id, + column, + operator, + value, + }) + }, 1000) + + return () => { + clearTimeout(timeout) + } + }, [ + column, + operator, + value, + props.filter.column, + props.filter.operator, + props.filter.value, + ]) + + const invalidReason: InvalidReason | null = useMemo(() => { + if (!props.isInvalid || !column || !operator) { + return null + } + + const columnExists = props.dataframe.columns.some( + (c) => c.name === column.name + ) + if (!columnExists) { + return { type: 'simple', reason: 'invalid-column' as const } + } + + if (renderError) { + return { type: 'render', reason: renderError } + } + + if (renderedValue) { + return getInvalidReason(column, renderedValue) + } + + if (value === '' || (Array.isArray(value) && value.length === 0)) { + return { type: 'simple', reason: 'empty-value' as const } + } + + return null + }, [ + props.isInvalid, + column, + operator, + value, + props.dataframe, + renderedValue, + renderError, + ]) + + const onChangeOperator = useCallback( + (newOp: Operator | null) => { + const wasMultiValue = + VisualizationStringFilterMultiValuesOperator.safeParse(operator).success + const isMultiValue = + VisualizationStringFilterMultiValuesOperator.safeParse(newOp).success + + if (wasMultiValue && isMultiValue) { + if (!Array.isArray(value)) { + setValue(value === '' ? [] : [value]) + } + } else if (wasMultiValue && !isMultiValue) { + if (Array.isArray(value)) { + setValue(value[0] ?? '') + } + } else if (!wasMultiValue && isMultiValue) { + if (typeof value === 'string') { + setValue(value === '' ? [] : [value]) + } + } else if (!wasMultiValue && !isMultiValue) { + if (Array.isArray(value)) { + setValue(value[0] ?? '') + } + } + + if (column && (newOp === 'isNull' || newOp === 'isNotNull')) { + if ( + NumpyNumberTypes.or(NumpyTimeDeltaTypes).safeParse(column.type) + .success + ) { + setValue('0') + } + + if ( + NumpyStringTypes.or(NumpyJsonTypes).safeParse(column.type).success + ) { + setValue('filter') + } + + if (NumpyDateTypes.safeParse(column.type).success) { + setValue(new Date().toISOString()) + } + } + setOperator(newOp) + }, + [operator, value] + ) + + const buttonRef = useRef(null) + const { onOpen, dropdownPosition } = useDropdownPosition(buttonRef) + const [open, setOpen] = useState(false) + const menuRef = useRef(null) + useEffect(() => { + if (!open) { + return + } + + const onClickOutside = (event: MouseEvent) => { + if (menuRef.current && !menuRef.current.contains(event.target as Node)) { + // only close if no one else handles this event + requestAnimationFrame(() => { + if (event.defaultPrevented) return + setOpen(false) + }) + } + } + + document.addEventListener('click', onClickOutside) + + return () => { + document.removeEventListener('click', onClickOutside) + } + }, [menuRef, open]) + + const onClickButton = useCallback(() => { + if (!props.disabled) { + onOpen() + setOpen(true) + } + }, [props.disabled, onOpen]) + + return ( +
+ {invalidReason ? ( +
+ {invalidReason.type === 'simple' ? ( + <> + {invalidReason.reason === 'invalid-column' ? ( + + The selected column does not belong to the{' '} + {props.dataframe.name}{' '} + dataframe. + + ) : invalidReason.reason === 'empty-value' ? ( + + The value for the selected column of type{' '} + {column?.type} cannot be + empty. + + ) : ( + + The value{' '} + + {JSON.stringify(renderedValue ?? value)} + {' '} + is invalid for the selected column of type{' '} + {column?.type}. + + )} + + ) : ( +
+

We received the following error:

+
+                {invalidReason.reason.ename} - {invalidReason.reason.evalue}
+              
+
+ )} +
+ ) : renderedValue && renderedValue !== value ? ( +
+ This filter includes a Python value. The raw value is{' '} + + {Array.isArray(value) + ? value.length > 1 + ? `[${value.map((v) => JSON.stringify(v)).join(', ')}]` + : value[0] + : value} + +
+ ) : null} + + + + {ReactDOM.createPortal( + +
+
+ + + {column && ( + <> + + icon={() => null} + label="Operator" + value={operator} + options={getOperatorOptions(column.type)} + onChange={onChangeOperator} + search={searchOperator} + getLabel={getOperatorLabel} + placeholder="Operator" + disabled={props.disabled} + /> + {operator !== 'isNull' && operator !== 'isNotNull' && ( +
+ {VisualizationStringFilterMultiValuesOperator.safeParse( + operator + ).success ? ( + } + value={Array.from(value)} + options={ + 'categories' in column + ? column.categories?.map((c) => c.toString()) ?? + [] + : [] + } + onChange={setValue} + search={(options, query) => + options.filter((c) => c.includes(query)) + } + getLabel={(value) => value} + icon={() => null} + placeholder="Value" + disabled={props.disabled} + valueFromQuery={identity} + /> + ) : ( +
+ + +
+ )} +
+ )} + + )} +
+
+
, + document.body + )} +
+ ) +} + +function FilterValueLabel() { + return ( +
+ + + + +
+ ) +} + +export default FilterSelector diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx new file mode 100644 index 00000000..e8184a54 --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx @@ -0,0 +1,263 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { + CheckIcon, + ChevronUpDownIcon, + XMarkIcon, +} from '@heroicons/react/20/solid' +import { Combobox as HUCombobox, Transition } from '@headlessui/react' +import clsx from 'clsx' +import ReactDOM from 'react-dom' +import useDropdownPosition from '@/hooks/dropdownPosition' + +interface Props { + label?: string | JSX.Element + value: T[] + options: T[] + equals?: (a: T, b: T) => boolean + onChange: (value: T[]) => void + search: (options: T[], query: string) => T[] + getLabel: (value: T) => string + icon: (value: T) => React.ReactNode + placeholder: string + valueFromQuery?: (query: string) => T + fetchOptions?: (query: string) => Promise + loadingOptions?: boolean + disabled?: boolean +} + +export default function MultiCombobox(props: Props) { + const [query, setQuery] = useState(null) + const buttonRef = useRef(null) + + const filteredOptions = useMemo(() => { + return query === null || query === '' + ? props.options + : props.search(props.options, query) + }, [query, props.options, props.search]) + + useEffect(() => { + if (filteredOptions.length < 5 && props.fetchOptions) { + props.fetchOptions(query ?? '') + } + }, [query, filteredOptions, props.fetchOptions]) + + const onKeyDown = useCallback( + (event: React.KeyboardEvent) => { + if (props.valueFromQuery && query) { + if (event.key === 'Enter' || event.key === 'Tab') { + event.preventDefault() + props.onChange([...props.value, props.valueFromQuery(query)]) + setQuery(null) + } + } + }, + [query, props.valueFromQuery, props.onChange, props.value] + ) + + const [open, setOpen] = useState(false) + const inputContainerRef = useRef(null) + const menuRef = useRef(null) + const { onOpen, dropdownPosition } = useDropdownPosition(inputContainerRef) + const onClickButton = useCallback(() => { + if (!props.disabled) { + setOpen(true) + onOpen() + } + }, [props.disabled, onOpen]) + useEffect(() => { + if (!open) { + return + } + + const onClickOutside = (e: MouseEvent) => { + if ( + inputContainerRef.current && + !inputContainerRef.current.contains(e.target as Node) && + menuRef.current && + !menuRef.current.contains(e.target as Node) + ) { + e.preventDefault() + e.stopImmediatePropagation() + e.stopPropagation() + setOpen(false) + } + } + + document.addEventListener('click', onClickOutside) + return () => { + document.removeEventListener('click', onClickOutside) + } + }, [inputContainerRef, menuRef, open]) + + return ( +
+ {props.label ? ( + typeof props.label === 'string' ? ( +
+ {props.label} +
+ ) : ( + props.label + ) + ) : null} +
+
+
+
+ {props.value.map((value, index) => ( +
+
+ {props.getLabel(value)} + +
+
+ ))} +
+ setQuery(event.target.value)} + placeholder={props.placeholder} + onClick={(e) => { + if (!open) { + e.preventDefault() + buttonRef.current?.click() + } + }} + onFocus={(e) => { + if (!open) { + e.preventDefault() + buttonRef.current?.click() + setQuery('') + } + }} + onBlur={(e) => { + e.preventDefault() + setTimeout(() => setQuery(null), 200) + }} + value={query ?? ''} + onKeyDown={onKeyDown} + /> +
+
+ + + {ReactDOM.createPortal( + +
    + {filteredOptions.map((option, i) => { + const active = props.value.some((o) => + props.equals ? props.equals(option, o) : option === o + ) + + return ( +
  • { + e.preventDefault() + const exists = props.value.some((v) => + props.equals ? props.equals(v, option) : v === option + ) + if (exists) { + props.onChange( + props.value.filter((v) => + props.equals + ? !props.equals(v, option) + : v !== option + ) + ) + } else { + props.onChange([...props.value, option]) + } + }} + > + <> +
    +
    + {props.icon(option)} + + {props.getLabel(option)} + +
    + + {active && ( +
    + +
  • + ) + })} + {props.loadingOptions && ( +
    Loading...
    + )} +
+
, + document.body + )} +
+
+ ) +} diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx new file mode 100644 index 00000000..c9bec965 --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx @@ -0,0 +1,662 @@ +import { format as d3Format } from 'd3-format' +import { QuestionMarkCircleIcon } from '@heroicons/react/24/solid' +import clsx from 'clsx' +import { + ChartType, + DataFrame, + DataFrameColumn, + NumpyDateTypes, + NumpyNumberTypes, + TimeUnit, + HistogramFormat, + HistogramBin, + NumpyTimeDeltaTypes, + YAxis, + DataFrameDateColumn, + DataFrameStringColumn, + DataFrameNumberColumn, +} from '@briefer/types' +import ChartTypeSelector from '@/components/ChartTypeSelector' +import AxisSelector from '@/components/AxisSelector' +import AxisModifierSelector from '@/components/AxisModifierSelector' +import { useCallback, useEffect, useMemo, useState } from 'react' +import useResettableState from '@/hooks/useResettableState' +import VisualizationSettingsTabs, { Tab } from './VisualizationSettingTabs' +import YAxisPicker from './YAxisPicker' +import VisualizationToggle from './VisualizationToggle' +import { PortalTooltip } from '@/components/Tooltips' +import { sortWith, ascend, GT } from 'ramda' +import ScrollBar from '@/components/ScrollBar' + +interface Props { + isHidden: boolean + dataframe: DataFrame | null + chartType: ChartType + onChangeChartType: (chartType: ChartType) => void + xAxis: DataFrameColumn | null + onChangeXAxis: (column: DataFrameColumn | null) => void + xAxisName: string | null + onChangeXAxisName: (name: string | null) => void + xAxisSort: 'ascending' | 'descending' + onChangeXAxisSort: (sort: 'ascending' | 'descending') => void + xAxisGroupFunction: TimeUnit | null + onChangeXAxisGroupFunction: (groupFunction: TimeUnit | null) => void + yAxes: YAxis[] + onChangeYAxes: (yAxes: YAxis[]) => void + isEditable: boolean +} + +function isValidD3Format(format: string): boolean { + try { + d3Format(format) + return true + } catch { + return false + } +} + +function VisualizationControls(props: Props) { + const onChangeXAxisGroupFunction = useCallback( + (groupFunction: string | null) => { + if (groupFunction === null) { + props.onChangeXAxisGroupFunction(null) + return + } + + const timeUnit = TimeUnit.safeParse(groupFunction) + if (timeUnit.success) { + props.onChangeXAxisGroupFunction(timeUnit.data) + return + } + }, + [props.onChangeXAxisGroupFunction] + ) + + const onChangeXAxisSort = useCallback( + (sort: string | null) => { + if (sort === 'ascending' || sort === 'descending') { + props.onChangeXAxisSort(sort) + } else { + props.onChangeXAxisSort('ascending') + } + }, + [props.onChangeXAxisSort] + ) + + // const onChangeHistogramFormat = useCallback( + // (format: string | null) => { + // const parsed = HistogramFormat.safeParse(format) + // if (parsed.success) { + // props.onChangeHistogramFormat(parsed.data) + // } + // }, + // [props.onChangeHistogramFormat] + // ) + + // const onChangeHistogramBin = useCallback( + // (bin: string | null) => { + // if (bin === 'auto') { + // props.onChangeHistogramBin({ type: 'auto' }) + // return + // } + + // if (bin === 'stepSize') { + // props.onChangeHistogramBin({ type: 'stepSize', value: 1 }) + // return + // } + + // if (bin === 'maxBins') { + // props.onChangeHistogramBin({ type: 'maxBins', value: 10 }) + // return + // } + // }, + // [props.onChangeHistogramBin] + // ) + + // const [binText, setBinText] = useResettableState( + // () => (props.histogramBin.type === 'maxBins' ? '10' : '1'), + // [props.histogramBin.type] + // ) + // const onChangeBinText: React.ChangeEventHandler = + // useCallback( + // (e) => { + // setBinText(e.target.value) + // }, + // [setBinText] + // ) + + // useEffect(() => { + // if (props.histogramBin.type === 'auto') { + // return + // } + + // if (props.histogramBin.type === 'stepSize') { + // const value = parseFloat(binText) + // if (Number.isNaN(value) || value <= 0) { + // return + // } + + // props.onChangeHistogramBin({ type: 'stepSize', value }) + // return + // } + + // if (props.histogramBin.type === 'maxBins') { + // const value = Number(binText) + // if (Number.isNaN(value) || !Number.isInteger(value) || value < 2) { + // return + // } + + // props.onChangeHistogramBin({ type: 'maxBins', value }) + // return + // } + // }, [props.histogramBin.type, binText, props.onChangeHistogramBin]) + + // const binError = useMemo(() => { + // if (props.histogramBin.type === 'auto') { + // return null + // } + + // if (props.histogramBin.type === 'stepSize') { + // const value = parseFloat(binText) + // if (isNaN(value) || value <= 0) { + // return 'Must be a positive number.' + // } + + // return null + // } + + // if (props.histogramBin.type === 'maxBins') { + // const value = Number(binText) + // if (Number.isNaN(value) || !Number.isInteger(value)) { + // return 'Must be an integer.' + // } + + // if (value < 2) { + // return 'Must be at least 2.' + // } + + // return null + // } + // }, [props.histogramBin.type, binText]) + + const onChangeXAxisName = useCallback( + (e: React.ChangeEvent) => { + if (e.target.value === '') { + props.onChangeXAxisName(null) + return + } + props.onChangeXAxisName(e.target.value) + }, + [props.onChangeXAxisName] + ) + + const onChangeYAxisName = useCallback( + ( + e: React.ChangeEvent, + axisIndex: number, + seriesIndex: number + ) => { + if (props.yAxes.length === 0) { + return + } + + const name = e.target.value === '' ? null : e.target.value + + const targetAxis = props.yAxes[axisIndex] + targetAxis.series[seriesIndex].axisName = name + + props.onChangeYAxes( + props.yAxes.map((y, i) => (i === axisIndex ? targetAxis : y)) + ) + }, + [props.yAxes, props.onChangeYAxes] + ) + + // const onChangeNumberValuesFormat = useCallback( + // (e: React.ChangeEvent) => { + // if (e.target.value === '') { + // props.onChangeNumberValuesFormat(null) + // return + // } + // props.onChangeNumberValuesFormat(e.target.value) + // }, + // [props.onChangeNumberValuesFormat] + // ) + + const [tab, setTab] = useState('general') + + const onChangeYAxis = useCallback( + (yAxis: YAxis, index: number) => { + props.onChangeYAxes(props.yAxes.map((y, i) => (i === index ? yAxis : y))) + }, + [props.yAxes, props.onChangeYAxes] + ) + + const onRemoveYAxis = useCallback( + (index: number) => { + const newAxes = props.yAxes.slice() + newAxes.splice(index, 1) + props.onChangeYAxes(newAxes) + }, + [props.yAxes, props.onChangeYAxes] + ) + + const onAddYAxis = useCallback(() => { + props.onChangeYAxes([ + ...props.yAxes, + { + series: [ + { + axisName: null, + column: null, + aggregateFunction: null, + colorBy: null, + chartType: null, + }, + ], + }, + ]) + }, [props.yAxes, props.onChangeYAxes]) + + const onChangeChartType = useCallback( + (chartType: ChartType) => { + // if only one y-axis is present, reset the chart type of the series + if (props.yAxes.length === 1) { + props.onChangeYAxes([ + { + ...props.yAxes[0], + series: props.yAxes[0].series.map((s) => ({ + ...s, + chartType: null, + })), + }, + ]) + } + + props.onChangeChartType(chartType) + }, + [props.onChangeChartType, props.yAxes] + ) + + const defaultXAxisColumn = useMemo( + () => + sortWith( + [ + (a, b) => + DataFrameDateColumn.safeParse(a).success === + DataFrameDateColumn.safeParse(b).success + ? 0 + : DataFrameDateColumn.safeParse(a).success + ? -1 + : 1, + (a, b) => + DataFrameStringColumn.safeParse(a).success === + DataFrameStringColumn.safeParse(b).success + ? 0 + : DataFrameStringColumn.safeParse(a).success + ? -1 + : 1, + (a, b) => + DataFrameNumberColumn.safeParse(a).success === + DataFrameNumberColumn.safeParse(b).success + ? 0 + : DataFrameNumberColumn.safeParse(a).success + ? -1 + : 1, + // Put columns with 'id' in the name at the end to avoid them being selected by default + (a, b) => + a.name.toString().toLowerCase().includes('id') + ? 1 + : b.name.toString().toLowerCase().includes('id') + ? -1 + : 0, + ], + props.dataframe?.columns ?? [] + )[0] ?? null, + [props.dataframe?.columns] + ) + + const axisNameComponents = props.yAxes.map((yAxis, yI) => + yAxis.series.map((_, sI) => { + return ( +
+ + onChangeYAxisName(e, yI, sI)} + disabled={!props.dataframe || !props.isEditable} + /> +
+ ) + }) + ) + + return ( + + +
+
+ {tab === 'general' && ( +
+ {props.yAxes.length > 1 || + props.yAxes.some((y) => y.series.length > 1) ? null : ( +
+ +
+ )} + +
+ + + Period{' '} + + (optional) + + + + + If provided, this column will be used to sort the + data before picking the number. +
+ } + > +
+ ) : ( + 'X-Axis' + ) + } + value={props.xAxis} + columns={[ + ...(props.chartType === 'number' || + props.chartType === 'trend' + ? [null] + : []), + ...(props.dataframe?.columns ?? []).filter((c) => + props.chartType === 'histogram' + ? NumpyNumberTypes.or(NumpyTimeDeltaTypes).safeParse( + c.type + ).success + : props.chartType === 'number' || + props.chartType === 'trend' + ? NumpyDateTypes.safeParse(c.type).success + : true + ), + ]} + onChange={props.onChangeXAxis} + disabled={!props.dataframe || !props.isEditable} + defaultValue={defaultXAxisColumn} + /> +
+ {props.xAxis && + props.chartType !== 'histogram' && + NumpyDateTypes.safeParse(props.xAxis.type).success && ( + + )} + {/* {props.chartType === 'histogram' ? ( */} + {/* <> */} + {/* */} + {/* */} + {/* {props.histogramBin.type !== 'auto' && ( */} + {/*
*/} + {/*
*/} + {/* */} + {/* */} + {/*
*/} + {/*
*/} + {/* {binError} */} + {/*
*/} + {/*
*/} + {/* )} */} + {/* */} + {/* ) : ( */} + + {/* )} */} +
+
+ {props.chartType !== 'histogram' && ( +
+ {props.yAxes + .slice( + 0, + props.chartType === 'trend' || + props.chartType === 'number' + ? 1 + : undefined + ) + .map((yAxis, i) => ( + + ))} +
+ )} +
+ )} + {tab === 'x-axis' && ( +
+
+ + +
+
+ )} + {tab === 'y-axis' && ( +
+ {axisNameComponents} +
+ )} + {tab === 'labels' && ( +
+
+ {}} + /> +
+
+
+ +
+ +
+ + This fields accepts{' '} + + D3 format strings + + . For example, use{' '} + % to format the + numbers as percentage or{' '} + $.2f to format + the numbers as currency with two decimal places. + +
+
+ } + > +
+
+ {/* */} + {/* {props.numberValuesFormat && */} + {/* !isValidD3Format(props.numberValuesFormat ?? '') && ( */} + {/*
*/} + {/* Invalid format string */} + {/*
*/} + {/* )} */} +
+ + )} + + +
+ ) +} + +export default VisualizationControls diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx new file mode 100644 index 00000000..2fe66cde --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx @@ -0,0 +1,46 @@ +import clsx from 'clsx' + +export type Tab = 'general' | 'x-axis' | 'y-axis' | 'labels' + +const tabs: Tab[] = ['general', 'x-axis', 'y-axis', 'labels'] + +function tabToName(tab: Tab): string { + switch (tab) { + case 'general': + return 'General' + case 'x-axis': + return 'X-Axis' + case 'y-axis': + return 'Y-Axis' + case 'labels': + return 'Labels' + } +} + +interface Props { + tab: Tab + onChange: (tab: Tab) => void +} +export default function VisualizationSettingsTabs(props: Props) { + return ( +
+ +
+ ) +} diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationToggle.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationToggle.tsx new file mode 100644 index 00000000..01b5370e --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationToggle.tsx @@ -0,0 +1,47 @@ +import { Switch } from '@headlessui/react' +import clsx from 'clsx' + +interface Props { + label: string + enabled: boolean + onToggle: (showDataLabels: boolean) => void + disabled?: boolean +} + +function VisualizationToggle({ label, enabled, onToggle, disabled }: Props) { + return ( + + + + {label} + + + + + + ) +} + +export default VisualizationToggle diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationView.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationView.tsx new file mode 100644 index 00000000..4e9d13fe --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationView.tsx @@ -0,0 +1,290 @@ +import * as echarts from 'echarts' +import { + ChevronDoubleRightIcon, + ChevronDoubleLeftIcon, +} from '@heroicons/react/24/solid' +import { XMarkIcon } from '@heroicons/react/20/solid' +import { CubeTransparentIcon } from '@heroicons/react/24/solid' +import { ExclamationTriangleIcon } from '@heroicons/react/24/outline' +import { ChartType, DataFrame } from '@briefer/types' +import LargeSpinner from '@/components/LargeSpinner' +import clsx from 'clsx' +import useSideBar from '@/hooks/useSideBar' +import useResettableState from '@/hooks/useResettableState' +import { useEffect, useLayoutEffect, useRef, useState } from 'react' +import debounce from 'lodash.debounce' +import { VisualizationV2BlockOutput } from '@briefer/editor' + +interface Props { + title: string + chartType: ChartType + output: VisualizationV2BlockOutput | null + tooManyDataPointsHidden: boolean + onHideTooManyDataPointsWarning: () => void + loading: boolean + error: + | 'dataframe-not-found' + | 'dataframe-not-set' + | 'unknown' + | 'invalid-params' + | null + dataframe: DataFrame | null + onNewSQL: () => void + controlsHidden: boolean + isFullscreen: boolean + isHidden: boolean + onToggleHidden: () => void + onExportToPNG?: () => void + isDashboard: boolean + isEditable: boolean +} +function VisualizationView(props: Props) { + const [isSideBarOpen] = useSideBar() + const key = `${isSideBarOpen}${props.controlsHidden.toString()}${props.isFullscreen.toString()}` + + return ( +
+ {props.output ? ( +
+ + {props.loading && ( +
+ +
+ )} + {!props.tooManyDataPointsHidden && !props.isDashboard && ( +
+
+ + + Too many data points. Consider filtering or aggregating the + data.{' '} + + +
+
+ )} +
+ ) : props.loading ? ( +
+ +
+ ) : ( +
+ {props.error === 'dataframe-not-found' && props.dataframe ? ( +
+ +
+
+ {props.dataframe.name} not + found. +
+
+ Try running the block for{' '} + {props.dataframe.name}{' '} + again. +
+
+
+ ) : props.error === 'unknown' ? ( +
+ + + Something went wrong + +
+ ) : props.error === 'invalid-params' ? ( +
+ + + Missing or invalid parameters + +
+ ) : ( +
+ + No data + {!props.dataframe && ( + + )} +
+ )} +
+ )} + {!props.isDashboard && props.isEditable && ( + + )} + {!props.isDashboard && + props.chartType !== 'number' && + props.chartType !== 'trend' && ( + + )} +
+ ) +} + +function Visualization(props: { + title: string + chartType: ChartType + isDashboard: boolean + output: VisualizationV2BlockOutput +}) { + const [size, setSize] = useResettableState( + () => null as { width: number; height: number } | null, + [props.output] + ) + + const measureDiv = useRef(null) + const container = useRef(null) + useLayoutEffect(() => { + if (!size && measureDiv.current) { + const { width, height } = measureDiv.current.getBoundingClientRect() + setSize({ width, height }) + } + }, [measureDiv.current, size]) + + useEffect(() => { + if (!container.current) { + return + } + + const parent = container.current.parentElement + if (!parent) { + return + } + + const observer = new ResizeObserver( + debounce(() => { + const { width, height } = parent.getBoundingClientRect() + setSize((size) => { + if ( + width && + height && + (!size || size.width !== width || size.height !== height) + ) { + return null + } + + return size + }) + }, 500) + ) + + observer.observe(parent) + + return () => { + observer.disconnect() + } + }, [container.current]) + + if (!size) { + return
+ } + + if (props.chartType === 'trend' || props.chartType === 'number') { + // TODO + return null + // return ( + //
+ // + //
+ // ) + } + + return ( +
+ +
+ ) +} + +function BigNumberVisualization(props: { + title: string + chartType: 'trend' | 'number' + size: { width: number; height: number } + isDashboard: boolean +}) { + return null +} + +interface EchartsProps { + width: number + height: number + option: echarts.EChartsOption +} +function Echarts(props: EchartsProps) { + const ref = useRef(null) + const [chart, setChart] = useState(null) + + useEffect(() => { + if (!ref.current) { + return + } + + const chart = echarts.init(ref.current) + setChart(chart) + + return () => { + chart.dispose() + } + }, [ref.current]) + + useEffect(() => { + if (chart) { + chart.setOption(props.option) + } + }, [props.option, chart]) + + return
+} + +export default VisualizationView diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/YAxisPicker.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/YAxisPicker.tsx new file mode 100644 index 00000000..0b395dd1 --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/YAxisPicker.tsx @@ -0,0 +1,378 @@ +import AxisModifierSelector from '@/components/AxisModifierSelector' +import AxisSelector from '@/components/AxisSelector' +import ChartTypeSelector from '@/components/ChartTypeSelector' +import { + AggregateFunction, + ChartType, + DataFrame, + DataFrameColumn, + NumpyNumberTypes, + NumpyTimeDeltaTypes, + YAxis, + Series, + DataFrameNumberColumn, + DataFrameDateColumn, + DataFrameStringColumn, + DataFrameBooleanColumn, +} from '@briefer/types' +import { sortWith } from 'ramda' +import { useCallback, useMemo } from 'react' + +interface Props { + index: number + label?: string + defaultChartType: ChartType + yAxis: YAxis + onChange: (yAxis: YAxis, i: number) => void + isEditable: boolean + dataframe: DataFrame | null + onRemove?: (i: number) => void + onAddYAxis?: () => void +} + +const isNumberType = (column: DataFrameColumn | null) => + NumpyNumberTypes.safeParse(column?.type).success + +const getAggFunction = ( + defaultChartType: ChartType, + series: Series, + column: DataFrameColumn | null +) => { + const chartType = series.chartType ?? defaultChartType + + if (series.aggregateFunction !== null || !column || !isNumberType(column)) { + return series.aggregateFunction + } + + if ( + chartType === 'groupedColumn' || + chartType === 'stackedColumn' || + chartType === 'hundredPercentStackedColumn' || + chartType === 'line' || + chartType === 'area' || + chartType === 'hundredPercentStackedArea' + ) { + return 'sum' + } + + return null +} + +function YAxisPicker(props: Props) { + const onChangeColumn = useCallback( + (column: DataFrameColumn | null, index: number) => { + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.map((s, i) => + i === index + ? { + ...s, + column, + aggregateFunction: getAggFunction( + props.defaultChartType, + s, + column + ), + } + : s + ), + }, + props.index + ) + }, + [props.onChange, props.index] + ) + + const onChangeAggregateFunction = useCallback( + (aggregateFunction: string | null, index: number) => { + if (!aggregateFunction) { + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.map((s, i) => + i === index ? { ...s, aggregateFunction: null } : s + ), + }, + props.index + ) + return + } + + const func = AggregateFunction.safeParse(aggregateFunction) + if (func.success) { + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.map((s, i) => + i === index ? { ...s, aggregateFunction: func.data } : s + ), + }, + props.index + ) + } + }, + [props.onChange, props.yAxis, props.index] + ) + + const onChangeColorBy = useCallback( + (colorBy: string | null, index: number) => { + const column = + props.dataframe?.columns.find((c) => c.name.toString() === colorBy) ?? + null + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.map((s, i) => + i === index ? { ...s, colorBy: column } : s + ), + }, + props.index + ) + }, + [props.onChange, props.yAxis, props.dataframe, props.index] + ) + + const onRemoveSerie = useCallback( + (index: number) => { + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.filter((_, i) => i !== index), + }, + props.index + ) + + if (props.onRemove && props.yAxis.series.length === 1) { + props.onRemove(props.index) + } + }, + [props.onChange, props.yAxis, props.index, props.onRemove] + ) + + const onAddSerie = useCallback(() => { + props.onChange( + { + ...props.yAxis, + series: [ + ...props.yAxis.series, + { + axisName: null, + column: null, + aggregateFunction: null, + colorBy: null, + chartType: null, + }, + ], + }, + props.index + ) + }, [props.onChange, props.yAxis, props.index]) + + const onChartTypeChange = useCallback( + (chartType: ChartType | null, index: number) => { + props.onChange( + { + ...props.yAxis, + series: props.yAxis.series.map((s, i) => + i === index ? { ...s, chartType } : s + ), + }, + props.index + ) + }, + [props.onChange, props.yAxis, props.index] + ) + + const columns = useMemo( + () => + (props.dataframe?.columns ?? []).filter((c) => + props.defaultChartType === 'trend' || + props.defaultChartType === 'number' + ? NumpyNumberTypes.safeParse(c.type).success + : true + ), + [props.dataframe, props.defaultChartType] + ) + + const defaultValues = useMemo( + () => + sortWith( + [ + (a, b) => + DataFrameNumberColumn.safeParse(a).success === + DataFrameNumberColumn.safeParse(b).success + ? 0 + : DataFrameNumberColumn.safeParse(a).success + ? -1 + : 1, + (a, b) => + DataFrameDateColumn.safeParse(a).success === + DataFrameDateColumn.safeParse(b).success + ? 0 + : DataFrameDateColumn.safeParse(a).success + ? -1 + : 1, + (a, b) => + DataFrameBooleanColumn.safeParse(a).success === + DataFrameNumberColumn.safeParse(b).success + ? 0 + : DataFrameNumberColumn.safeParse(a).success + ? -1 + : 1, + (a, b) => + DataFrameStringColumn.safeParse(a).success === + DataFrameStringColumn.safeParse(b).success + ? 0 + : DataFrameStringColumn.safeParse(a).success + ? -1 + : 1, + // Put columns with 'id' in the name at the end to avoid them being selected by default + (a, b) => + a.name.toString().toLowerCase().includes('id') + ? 1 + : b.name.toString().toLowerCase().includes('id') + ? -1 + : 0, + ], + props.dataframe?.columns ?? [] + ), + [props.dataframe] + ) + + return ( +
+
+ {props.defaultChartType !== 'trend' && + props.defaultChartType !== 'number' && ( +
+ {props.onAddYAxis ? '' : props.index === 0 ? 'Left' : 'Right'}{' '} + Y-Axis +
+ )} + {props.onAddYAxis && ( + + )} +
+
+ {props.yAxis.series + .slice( + 0, + props.defaultChartType === 'trend' || + props.defaultChartType === 'number' + ? 1 + : undefined + ) + .map((s, i) => ( +
+
+
+ onChangeColumn(c, i)} + disabled={!props.dataframe || !props.isEditable} + defaultValue={ + defaultValues[i % defaultValues.length] ?? null + } + /> +
+ + {(props.yAxis.series.length > 1 || props.onRemove) && ( + + )} +
+ {props.defaultChartType !== 'trend' && + props.defaultChartType !== 'number' && + (props.yAxis.series.length > 1 || + !props.onAddYAxis || + (s.chartType && s.chartType !== props.defaultChartType)) && ( + onChartTypeChange(t, i)} + isEditable={props.isEditable} + /> + )} + {s.column && ( +
+ onChangeAggregateFunction(agg, i)} + disabled={!props.dataframe || !props.isEditable} + /> + {props.defaultChartType !== 'trend' && + props.defaultChartType !== 'number' && ( + ({ + name: c.name.toString(), + value: c.name.toString(), + })), + ]} + onChange={(c) => onChangeColorBy(c, i)} + disabled={!props.dataframe || !props.isEditable} + /> + )} +
+ )} +
+ ))} +
+ {props.defaultChartType !== 'trend' && + props.defaultChartType !== 'number' && + (props.yAxis.series.length > 1 || + props.yAxis.series[0]?.column !== null) && ( +
+ +
+ )} +
+ ) +} + +export default YAxisPicker diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx new file mode 100644 index 00000000..b041c92e --- /dev/null +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx @@ -0,0 +1,595 @@ +import { v4 as uuidv4 } from 'uuid' + +import { ArrowPathIcon, ClockIcon, StopIcon } from '@heroicons/react/20/solid' +import * as Y from 'yjs' +import { + type VisualizationV2Block, + BlockType, + ExecutionQueue, + isExecutionStatusLoading, + YBlock, + getVisualizationV2Attributes, + isVisualizationV2Block, +} from '@briefer/editor' +import { ApiDocument } from '@briefer/database' +import { FunnelIcon } from '@heroicons/react/24/outline' +import { useCallback, useEffect, useMemo, useState } from 'react' +import HeaderSelect from '@/components/HeaderSelect' +import clsx from 'clsx' +import { + ChartType, + DataFrame, + DataFrameColumn, + HistogramBin, + HistogramFormat, + TimeUnit, + VisualizationFilter, + NumpyDateTypes, + YAxis, + exhaustiveCheck, +} from '@briefer/types' +import VisualizationControls from './VisualizationControls' +import VisualizationView from './VisualizationView' +import { ConnectDragPreview } from 'react-dnd' +import { head } from 'ramda' +import { useEnvironmentStatus } from '@/hooks/useEnvironmentStatus' +import { VisualizationExecTooltip } from '../../ExecTooltip' +import useFullScreenDocument from '@/hooks/useFullScreenDocument' +import HiddenInPublishedButton from '../../HiddenInPublishedButton' +import useEditorAwareness from '@/hooks/useEditorAwareness' +import { useBlockExecutions } from '@/hooks/useBlockExecution' + +interface Props { + document: ApiDocument + dataframes: Y.Map + block: Y.XmlElement + blocks: Y.Map + dragPreview: ConnectDragPreview | null + isEditable: boolean + isPublicMode: boolean + onAddGroupedBlock: ( + blockId: string, + blockType: BlockType, + position: 'before' | 'after' + ) => void + isDashboard: boolean + hasMultipleTabs: boolean + isBlockHiddenInPublished: boolean + onToggleIsBlockHiddenInPublished: (blockId: string) => void + isCursorWithin: boolean + isCursorInserting: boolean + executionQueue: ExecutionQueue + userId: string | null +} +function VisualizationV2Block(props: Props) { + const attrs = getVisualizationV2Attributes(props.block) + const dataframe = useMemo(() => { + if (attrs.input.dataframeName) { + return props.dataframes.get(attrs.input.dataframeName) ?? null + } + + return null + }, [props.dataframes, attrs.input.dataframeName]) + + const onChangeDataframe = useCallback( + (dataframeName: string) => { + const df = props.dataframes.get(dataframeName) + if (df) { + props.block.setAttribute('input', { + ...attrs.input, + dataframeName, + }) + } + }, + [props.block, props.dataframes, attrs.input] + ) + + const dataframeOptions = Array.from(props.dataframes.values()).map((df) => ({ + value: df.name, + label: df.name, + })) + + const blockId = attrs.id + + const onNewSQL = useCallback(() => { + if (blockId) { + props.onAddGroupedBlock(blockId, BlockType.SQL, 'before') + } + }, [blockId, props.onAddGroupedBlock]) + + const onChangeXAxis = useCallback( + (xAxis: DataFrameColumn | null) => { + const newInput = { + ...attrs.input, + xAxis, + } + if (xAxis) { + const isDateTime = NumpyDateTypes.safeParse(xAxis.type).success + if (isDateTime && !attrs.input.xAxisGroupFunction) { + attrs.input.xAxisGroupFunction = 'date' + } + } + props.block.setAttribute('input', newInput) + }, + [props.block, attrs.input] + ) + + const onChangeXAxisName = useCallback( + (name: string | null) => { + props.block.setAttribute('input', { + ...attrs.input, + xAxisName: name, + }) + }, + [props.block, attrs.input] + ) + + const executions = useBlockExecutions( + props.executionQueue, + props.block, + 'visualization' + ) + const execution = head(executions) ?? null + const status = execution?.item.getStatus()._tag ?? 'idle' + + const { + status: envStatus, + loading: envLoading, + startedAt: environmentStartedAt, + } = useEnvironmentStatus(props.document.workspaceId) + + const onRun = useCallback(() => { + executions.forEach((e) => e.item.setAborting()) + props.executionQueue.enqueueBlock( + blockId, + props.userId, + environmentStartedAt, + { + _tag: 'visualization-v2', + } + ) + }, [ + executions, + blockId, + props.executionQueue, + environmentStartedAt, + props.userId, + ]) + + const onRunAbort = useCallback(() => { + switch (status) { + case 'enqueued': + case 'running': + execution?.item.setAborting() + break + case 'idle': + case 'unknown': + case 'completed': + onRun() + break + case 'aborting': + break + default: + exhaustiveCheck(status) + } + }, [status, execution, onRun]) + + const onAddFilter = useCallback(() => { + const newFilter: VisualizationFilter = { + id: uuidv4(), + type: 'unfinished-visualization-filter', + column: null, + operator: null, + value: null, + } + // props.block.setAttribute('filters', [...filters, newFilter]) + }, [, /*filters*/ props.block]) + + const onChangeFilter = useCallback( + (filter: VisualizationFilter) => { + // props.block.setAttribute( + // 'filters', + // filters.map((f) => (f.id === filter.id ? filter : f)) + // ) + }, + [, /*filters*/ props.block] + ) + + const onRemoveFilter = useCallback( + (filter: VisualizationFilter) => { + // props.block.setAttribute( + // 'filters', + // filters.filter((f) => f.id !== filter.id) + // ) + }, + [, /*filters*/ props.block] + ) + + const onToggleHidden = useCallback(() => { + props.block.setAttribute('controlsHidden', !attrs.controlsHidden) + }, [attrs.controlsHidden, props.block]) + + const onExportToPNG = async () => { + // // we don't need to check if props.renderer is undefined because the application sets as 'canvas' in this case + // if ( + // props.renderer === 'svg' || + // chartType === 'number' || + // chartType === 'trend' + // ) + // return + // // if the controls are visible the canvas shrinks, making the export smaller + // if (!controlsHidden) { + // onToggleHidden() + // // tick to ensure the canvas size gets updated + // await new Promise((r) => setTimeout(r, 0)) + // } + // const canvas = document.querySelector( + // `div[data-block-id='${blockId}'] canvas` + // ) as HTMLCanvasElement + // // TODO: identify when this is true + // if (!canvas) return + // const imageUrl = canvas.toDataURL('image/png') + // const fileName = title || 'Visualization' + // downloadFile(imageUrl, fileName) + } + + const onChangeChartType = useCallback( + (chartType: ChartType) => { + props.block.setAttribute('input', { + ...attrs.input, + chartType, + }) + }, + [attrs.input, props.block] + ) + + const onChangeXAxisGroupFunction = useCallback( + (groupFunction: TimeUnit | null) => { + props.block.setAttribute('input', { + ...attrs.input, + xAxisGroupFunction: groupFunction, + }) + }, + [props.block, attrs.input] + ) + + const onChangeXAxisSort = useCallback( + (sort: 'ascending' | 'descending') => { + // props.block.setAttribute('xAxisSort', sort) + }, + [props.block] + ) + + const onChangeHistogramFormat = useCallback( + (format: HistogramFormat) => { + // props.block.setAttribute('histogramFormat', format) + }, + [props.block] + ) + + const onChangeHistogramBin = useCallback( + (bin: HistogramBin) => { + // props.block.setAttribute('histogramBin', bin) + }, + [props.block] + ) + + const onChangeNumberValuesFormat = useCallback( + (name: string | null) => { + // props.block.setAttribute('numberValuesFormat', name) + }, + [props.block] + ) + + const tooManyDataPointsHidden = true // props.block.getAttribute('tooManyDataPointsHidden') ?? true + const onHideTooManyDataPointsWarning = useCallback(() => { + // props.block.setAttribute('tooManyDataPointsHidden', true) + }, [props.block]) + + const onChangeTitle = useCallback( + (e: React.ChangeEvent) => { + props.block.setAttribute('title', e.target.value) + }, + [props.block] + ) + + const [isDirty, setIsDirty] = useState(false) + useEffect(() => { + if (!dataframe) { + return + } + + let timeout: NodeJS.Timeout | null = null + function observe(event: Y.YXmlEvent) { + const block = event.target + if (!(block instanceof Y.XmlElement)) { + return + } + + if (!isVisualizationV2Block(block)) { + return + } + + if (!dataframe) { + return + } + + const shouldIgnore = + event.changes.keys.size === 0 || + Array.from(event.changes.keys.entries()).every( + ([key]) => key !== 'input' + ) + + if (!shouldIgnore) { + if (timeout) { + clearTimeout(timeout) + } + + timeout = setTimeout(() => { + setIsDirty(true) + }, 1000) + } + } + props.block.observe(observe) + + return () => { + if (timeout) { + clearTimeout(timeout) + } + + props.block.unobserve(observe) + } + }, [props.block, dataframe]) + + useEffect(() => { + if (isDirty) { + onRun() + setIsDirty(false) + } + }, [isDirty, props.block, onRun]) + + const [isFullscreen] = useFullScreenDocument(props.document.id) + + const onChangeYAxes = useCallback( + (yAxes: YAxis[]) => { + props.block.setAttribute('input', { + ...attrs.input, + yAxes, + }) + }, + [props.block, attrs.input] + ) + + const hasAValidYAxis = attrs.input.yAxes.some((yAxis) => + yAxis.series.some((s) => s.column !== null) + ) + + const onChangeShowDataLabels = useCallback( + (showDataLabels: boolean) => { + // props.block.setAttribute('showDataLabels', showDataLabels) + }, + [props.block] + ) + + const onToggleIsBlockHiddenInPublished = useCallback(() => { + props.onToggleIsBlockHiddenInPublished(blockId) + }, [props.onToggleIsBlockHiddenInPublished, blockId]) + + const [, editorAPI] = useEditorAwareness() + const onClickWithin = useCallback(() => { + editorAPI.insert(blockId, { scrollIntoView: false }) + }, [blockId, editorAPI.insert]) + + const viewLoading = isExecutionStatusLoading(status) + + if (props.isDashboard) { + return ( + + ) + } + + return ( +
+
+
+
{ + props.dragPreview?.(d) + }} + > +
+ +
+ + +
+
+
+
+ +
+ {/* {filters.map((filter) => ( */} + {/* c.name === filter.column?.name */} + {/* ) || */} + {/* isInvalidVisualizationFilter(filter, dataframe))) */} + {/* } */} + {/* disabled={!props.isEditable} */} + {/* /> */} + {/* ))} */} +
+
+ + +
+
+ +
+ + +
+
+ ) +} + +function RunVisualizationTooltip() { + return ( +
+ +
+ Refresh +
+
+ ) +} + +export default VisualizationV2Block diff --git a/apps/web/src/components/v2Editor/index.tsx b/apps/web/src/components/v2Editor/index.tsx index 1b72b307..6e06b14e 100644 --- a/apps/web/src/components/v2Editor/index.tsx +++ b/apps/web/src/components/v2Editor/index.tsx @@ -99,6 +99,7 @@ import useEditorAwareness, { EditorAwarenessProvider, } from '@/hooks/useEditorAwareness' import { SQLExtensionProvider } from './CodeEditor/sql' +import VisualizationV2Block from './customBlocks/visualizationV2' // The react-dnd package does not export this... type Identifier = string | symbol @@ -186,6 +187,7 @@ export function getTabIcon( case BlockType.Python: return CommandLineSmallIcon case BlockType.Visualization: + case BlockType.VisualizationV2: return ChartBarIcon case BlockType.Input: return PencilSquareIcon @@ -1100,6 +1102,7 @@ const Editor = (props: Props) => { ) break case BlockType.Visualization: + case BlockType.VisualizationV2: newBlockId = addBlockGroup( layout.value, blocks.value, @@ -1279,6 +1282,7 @@ const Editor = (props: Props) => { ) break case BlockType.Visualization: + case BlockType.VisualizationV2: addGroupedBlock( layout.value, blocks.value, @@ -1685,6 +1689,28 @@ function TabRef(props: TabRefProps) { executionQueue={props.executionQueue} /> ), + onVisualizationV2: (block) => ( + + ), onInput: (block) => ( block.getAttribute('componentId'), onRichText: () => null, onVisualization: () => null, + onVisualizationV2: () => null, onInput: () => null, onDropdownInput: () => null, onDateInput: () => null, diff --git a/packages/editor/src/blocks/index.ts b/packages/editor/src/blocks/index.ts index c3392ba5..6793ac10 100644 --- a/packages/editor/src/blocks/index.ts +++ b/packages/editor/src/blocks/index.ts @@ -65,12 +65,20 @@ import { getPivotTableBlockExecutedAt, getPivotTableBlockResultStatus, } from './pivotTable.js' +import { + duplicateVisualizationV2Block, + getVisualizationV2BlockErrorMessage, + getVisualizationV2BlockExecutedAt, + getVisualizationV2BlockResultStatus, + VisualizationV2Block, +} from './visualization-v2.js' export enum BlockType { RichText = 'RICH_TEXT', SQL = 'SQL', Python = 'PYTHON', Visualization = 'VISUALIZATION', + VisualizationV2 = 'VISUALIZATION_V2', Input = 'INPUT', DropdownInput = 'DROPDOWN_INPUT', DateInput = 'DATE_INPUT', @@ -101,6 +109,7 @@ export type Block = | DashboardHeaderBlock | WritebackBlock | PivotTableBlock + | VisualizationV2Block export type YBlock = Y.XmlElement @@ -129,6 +138,7 @@ export const getResultStatus = ( onPython: getPythonBlockResultStatus, onSQL: getSQLBlockResultStatus, onVisualization: getVisualizationBlockResultStatus, + onVisualizationV2: getVisualizationV2BlockResultStatus, onInput: (block) => getInputBlockResultStatus(block, blocks), onDropdownInput: (block) => getDropdownInputBlockResultStatus(block, blocks), @@ -149,6 +159,7 @@ export const getPrettyTitle = (type: BlockType): string => { case BlockType.Python: return 'Python' case BlockType.Visualization: + case BlockType.VisualizationV2: return 'Visualization' case BlockType.Input: return 'Input' @@ -231,6 +242,7 @@ export function isExecutableBlock(block: YBlock): boolean { onPython: () => true, onSQL: () => true, onVisualization: () => true, + onVisualizationV2: () => true, onInput: () => true, onDropdownInput: () => true, onWriteback: () => true, @@ -247,6 +259,7 @@ export function isInputBlock(block: YBlock): boolean { onPython: () => false, onSQL: () => false, onVisualization: () => false, + onVisualizationV2: () => false, onInput: () => true, onDropdownInput: () => true, onWriteback: () => false, @@ -284,6 +297,8 @@ export function duplicateBlock( onSQL: (block) => duplicateSQLBlock(newBlockId, block, blocks, options), onPython: (block) => duplicatePythonBlock(newBlockId, block, options), onVisualization: (block) => duplicateVisualizationBlock(newBlockId, block), + onVisualizationV2: (block) => + duplicateVisualizationV2Block(newBlockId, block), onInput: (block) => duplicateInputBlock(newBlockId, block, blocks), onDropdownInput: (block) => duplicateDropdownInputBlock(newBlockId, block, blocks), @@ -303,6 +318,7 @@ function getExecutedAt(block: YBlock, blocks: Y.Map): Date | null { onPython: (block) => getPythonBlockExecutedAt(block), onSQL: (block) => getSQLBlockExecutedAt(block, blocks), onVisualization: (block) => getVisualizationBlockExecutedAt(block), + onVisualizationV2: (block) => getVisualizationV2BlockExecutedAt(block), onInput: (block) => getInputBlockExecutedAt(block, blocks), onDropdownInput: (block) => getDropdownInputBlockExecutedAt(block, blocks), onWriteback: (block) => getWritebackBlockExecutedAt(block), @@ -387,6 +403,7 @@ export function getErrorMessage(block: YBlock): string | null { onPython: getPythonBlockErrorMessage, onSQL: getSQLBlockErrorMessage, onVisualization: getVisualizationBlockErrorMessage, + onVisualizationV2: getVisualizationV2BlockErrorMessage, onWriteback: getWritebackBlockErrorMessage, onInput: () => null, onDropdownInput: () => null, @@ -403,6 +420,7 @@ export const isRunnableBlock = (block: B): boolean => { onPython: () => true, onSQL: () => true, onVisualization: () => true, + onVisualizationV2: () => true, onWriteback: () => true, onInput: () => true, onDropdownInput: () => true, @@ -419,6 +437,7 @@ export * from './richText.js' export * from './sql.js' export * from './python.js' export * from './visualization.js' +export * from './visualization-v2.js' export * from './input.js' export * from './dropdownInput.js' export * from './dateInput.js' diff --git a/packages/editor/src/blocks/visualization-v2.ts b/packages/editor/src/blocks/visualization-v2.ts new file mode 100644 index 00000000..74098d98 --- /dev/null +++ b/packages/editor/src/blocks/visualization-v2.ts @@ -0,0 +1,251 @@ +import { z } from 'zod' +import * as Y from 'yjs' +import { + BlockType, + BaseBlock, + getAttributeOr, + getBaseAttributes, + duplicateBaseAttributes, + ResultStatus, + YBlock, +} from './index.js' +import { ChartType, DataFrameColumn, TimeUnit, YAxis } from '@briefer/types' +import { clone } from 'ramda' + +export type VisualizationV2BlockInput = { + dataframeName: string | null + chartType: ChartType + xAxis: DataFrameColumn | null + xAxisName: string | null + xAxisSort: 'ascending' | 'descending' + xAxisGroupFunction: TimeUnit | null + yAxes: YAxis[] +} + +function emptyInput(): VisualizationV2BlockInput { + return { + dataframeName: null, + chartType: 'groupedColumn', + xAxis: null, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: null, + yAxes: [], + } +} + +const CartesianAxisPosition = z.union([ + z.literal('top'), + z.literal('bottom'), + z.literal('left'), + z.literal('right'), +]) + +const ValueAxisBaseOption = z.object({ + type: z.literal('value'), +}) + +const OrdinalRawValue = z.string().or(z.number()) + +const CategoryAxisBaseOption = z.object({ + type: z.literal('category'), + data: z.array(OrdinalRawValue), +}) + +const TimeAxisBaseOption = z.object({ + type: z.literal('time'), +}) + +const AxisBaseOption = z.union([ + ValueAxisBaseOption, + CategoryAxisBaseOption, + TimeAxisBaseOption, +]) + +const CartesianAxisOption = z + .object({ + position: CartesianAxisPosition.optional(), + }) + .and(AxisBaseOption) + +export const VisualizationV2BlockOutputResult = z.object({ + xAxis: z.array(CartesianAxisOption), + yAxis: z.array(CartesianAxisOption), + series: z.array( + z.object({ + data: z.array(OrdinalRawValue), + type: z.literal('bar'), + }) + ), +}) + +export type VisualizationV2BlockOutputResult = z.infer< + typeof VisualizationV2BlockOutputResult +> + +export const VisualizationV2BlockOutput = z.object({ + executedAt: z.string(), + result: VisualizationV2BlockOutputResult, +}) + +export type VisualizationV2BlockOutput = z.infer< + typeof VisualizationV2BlockOutput +> + +export type VisualizationV2Block = BaseBlock & { + input: VisualizationV2BlockInput + output: VisualizationV2BlockOutput | null + + controlsHidden: boolean + error: + | 'dataframe-not-found' + | 'dataframe-not-set' + | 'unknown' + | 'invalid-params' + | null +} + +export function isVisualizationV2Block( + block: YBlock +): block is Y.XmlElement { + return block.getAttribute('type') === BlockType.VisualizationV2 +} + +export function makeVisualizationV2Block( + id: string, + input?: Partial +): Y.XmlElement { + const yBlock = new Y.XmlElement('block') + + const attrs: VisualizationV2Block = { + id, + index: null, + title: '', + type: BlockType.VisualizationV2, + input: { ...emptyInput(), ...(input ?? {}) }, + output: null, + controlsHidden: false, + error: null, + } + + for (const [key, value] of Object.entries(attrs)) { + // @ts-ignore + yBlock.setAttribute(key, value) + } + + return yBlock +} + +function getYAxes(input: VisualizationV2BlockInput): YAxis[] { + if (input.yAxes.length === 0) { + return [ + { + series: [ + { + axisName: null, + column: null, + aggregateFunction: null, + colorBy: null, + chartType: null, + }, + ], + }, + ] + } + + return input.yAxes +} + +export function getVisualizationV2Attributes( + block: Y.XmlElement +): VisualizationV2Block { + const input = getAttributeOr(block, 'input', emptyInput()) + const yAxes = getYAxes(input) + + return { + ...getBaseAttributes(block), + input: { ...input, yAxes }, + output: getAttributeOr(block, 'output', null), + controlsHidden: getAttributeOr(block, 'controlsHidden', false), + error: getAttributeOr(block, 'error', null), + } +} + +export function duplicateVisualizationV2Block( + newId: string, + block: Y.XmlElement +): Y.XmlElement { + const prevAttributes = getVisualizationV2Attributes(block) + + const nextBlock = makeVisualizationV2Block(newId) + + const nextAttributes: VisualizationV2Block = { + ...duplicateBaseAttributes(newId, prevAttributes), + input: clone(prevAttributes.input), + output: clone(prevAttributes.output), + controlsHidden: prevAttributes.controlsHidden, + error: prevAttributes.error, + } + + for (const [key, value] of Object.entries(nextAttributes)) { + // @ts-ignore + nextBlock.setAttribute(key, value) + } + + return nextBlock +} + +export function getVisualizationV2BlockResultStatus( + block: Y.XmlElement +): ResultStatus { + const error = block.getAttribute('error') + const output = block.getAttribute('output') + + switch (error) { + case 'dataframe-not-found': + case 'dataframe-not-set': + case 'unknown': + case 'invalid-params': + return 'error' + case null: + case undefined: + return output === null ? 'idle' : 'success' + } +} + +export function getVisualizationV2BlockExecutedAt( + block: Y.XmlElement +): Date | null { + const executedAt = getVisualizationV2Attributes(block).output?.executedAt + if (executedAt === undefined) { + return null + } + + return new Date(executedAt) +} + +export function getVisualizationV2BlockIsDirty( + _block: Y.XmlElement +): boolean { + // assume it is never dirty since it runs automatically on change + return false +} + +export function getVisualizationV2BlockErrorMessage( + block: Y.XmlElement +): string | null { + const attrs = getVisualizationV2Attributes(block) + + switch (attrs.error) { + case 'dataframe-not-found': + return `Dataframe ${attrs.input.dataframeName} not found` + case 'dataframe-not-set': + return 'No Dataframe selected' + case 'invalid-params': + return 'Missing or invalid parameters' + case 'unknown': + case null: + case undefined: + return null + } +} diff --git a/packages/editor/src/execution/item.ts b/packages/editor/src/execution/item.ts index 188f3ff2..dad322fa 100644 --- a/packages/editor/src/execution/item.ts +++ b/packages/editor/src/execution/item.ts @@ -74,6 +74,13 @@ export type ExecutionQueueItemVisualizationMetadata = z.infer< typeof ExecutionQueueItemVisualizationMetadata > +export const ExecutionQueueItemVisualizationV2Metadata = z.object({ + _tag: z.literal('visualization-v2'), +}) +export type ExecutionQueueItemVisualizationV2Metadata = z.infer< + typeof ExecutionQueueItemVisualizationV2Metadata +> + export const ExecutionQueueItemTextInputSaveValueMetadata = z.object({ _tag: z.literal('text-input-save-value'), }) @@ -142,6 +149,7 @@ export const ExecutionQueueItemMetadata = z.union([ ExecutionQueueItemSQLMetadata, ExecutionQueueItemSQLRenameDataframeMetadata, ExecutionQueueItemVisualizationMetadata, + ExecutionQueueItemVisualizationV2Metadata, ExecutionQueueItemTextInputSaveValueMetadata, ExecutionQueueItemTextInputRenameVariableMetadata, ExecutionQueueItemDateInputMetadata, diff --git a/packages/editor/src/execution/queue.ts b/packages/editor/src/execution/queue.ts index f3d0a292..92464f79 100644 --- a/packages/editor/src/execution/queue.ts +++ b/packages/editor/src/execution/queue.ts @@ -326,6 +326,7 @@ export class ExecutionQueue { }), onPython: () => ({ _tag: 'python', isSuggestion: false }), onVisualization: () => ({ _tag: 'visualization' }), + onVisualizationV2: () => ({ _tag: 'visualization-v2' }), onInput: () => ({ _tag: 'text-input-save-value' }), onDateInput: () => ({ _tag: 'date-input' }), onDropdownInput: () => ({ _tag: 'dropdown-input-save-value' }), diff --git a/packages/editor/src/index.ts b/packages/editor/src/index.ts index 2d9ceb7c..c887318a 100644 --- a/packages/editor/src/index.ts +++ b/packages/editor/src/index.ts @@ -24,6 +24,10 @@ import { YDashboardItem } from './dashboard.js' import { WritebackBlock } from './blocks/writeback.js' import { DateInputBlock, getDateInputAttributes } from './blocks/dateInput.js' import { PivotTableBlock } from './blocks/pivotTable.js' +import { + getVisualizationV2Attributes, + VisualizationV2Block, +} from './blocks/visualization-v2.js' export * from './operations/index.js' export * from './blocks/index.js' @@ -165,6 +169,7 @@ ${attrs.variable} = pytz.timezone('${attrs.value.timezone}').localize(datetime.d }, onRichText: () => {}, onVisualization: () => {}, + onVisualizationV2: () => {}, onFileUpload: () => {}, onDashboardHeader: () => {}, onWriteback: () => {}, @@ -218,6 +223,12 @@ export function getLastUpdatedAt(doc: Y.Doc): string | null { lastUpdatedAt = updatedAt } }, + onVisualizationV2: (block) => { + const output = getVisualizationV2Attributes(block).output + if (output && (!lastUpdatedAt || output.executedAt > lastUpdatedAt)) { + lastUpdatedAt = output.executedAt + } + }, onRichText: () => {}, onFileUpload: () => {}, onDashboardHeader: () => {}, @@ -246,6 +257,7 @@ export function switchBlockType( onSQL: (block: Y.XmlElement) => T onPython: (block: Y.XmlElement) => T onVisualization: (block: Y.XmlElement) => T + onVisualizationV2: (block: Y.XmlElement) => T onInput: (block: Y.XmlElement) => T onDropdownInput: (block: Y.XmlElement) => T onDateInput: (block: Y.XmlElement) => T @@ -265,6 +277,10 @@ export function switchBlockType( return handles.onPython(block as Y.XmlElement) case BlockType.Visualization: return handles.onVisualization(block as Y.XmlElement) + case BlockType.VisualizationV2: + return handles.onVisualizationV2( + block as Y.XmlElement + ) case BlockType.Input: return handles.onInput(block as Y.XmlElement) case BlockType.DropdownInput: diff --git a/packages/editor/src/operations/document.ts b/packages/editor/src/operations/document.ts index 7b44dd13..eb1b1f83 100644 --- a/packages/editor/src/operations/document.ts +++ b/packages/editor/src/operations/document.ts @@ -25,10 +25,10 @@ import { makeWritebackBlock } from '../blocks/writeback.js' import { makeDateInputBlock } from '../blocks/dateInput.js' import { YDashboardItem, - getBaseAttributes, getBlocks, getDashboard, getLayout, + makeVisualizationV2Block, removeBlocksFromDashboard, switchBlockType, } from '../index.js' @@ -55,7 +55,10 @@ export type AddBlockGroupBlock = isFileDataSource: boolean source?: string } - | { type: BlockType.Visualization; dataframeName: string | null } + | { + type: BlockType.VisualizationV2 | BlockType.Visualization + dataframeName: string | null + } | { type: BlockType.DashboardHeader; content: string } const createBlock = (block: AddBlockGroupBlock, yBlockDefs: Y.Map) => { @@ -83,6 +86,11 @@ const createBlock = (block: AddBlockGroupBlock, yBlockDefs: Y.Map) => { dataframeName: block.dataframeName, }) break + case BlockType.VisualizationV2: + yBlock = makeVisualizationV2Block(blockId, { + dataframeName: block.dataframeName, + }) + break case BlockType.Input: yBlock = makeInputBlock(blockId, yBlockDefs) break @@ -449,6 +457,7 @@ export const removeDashboardBlock = ( onPython: () => {}, onSQL: () => {}, onVisualization: () => {}, + onVisualizationV2: () => {}, onWriteback: () => {}, onDashboardHeader: () => { yBlockDefs.delete(blockId) diff --git a/yarn.lock b/yarn.lock index 33b1199d..45f895c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6182,6 +6182,14 @@ ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: dependencies: safe-buffer "^5.0.1" +echarts@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.6.0.tgz#2377874dca9fb50f104051c3553544752da3c9d6" + integrity sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA== + dependencies: + tslib "2.3.0" + zrender "5.6.1" + editorconfig@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-1.0.4.tgz#040c9a8e9a6c5288388b87c2db07028aa89f53a3" @@ -13307,6 +13315,11 @@ tsconfig-paths@^3.14.1, tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -14536,3 +14549,10 @@ zod@^3.22.4, zod@^3.23.8: version "3.23.8" resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== + +zrender@5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/zrender/-/zrender-5.6.1.tgz#e08d57ecf4acac708c4fcb7481eb201df7f10a6b" + integrity sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag== + dependencies: + tslib "2.3.0" From 6450adcf3e0e1320bf8614893c8df15c938e4711 Mon Sep 17 00:00:00 2001 From: Lucas Vieira Date: Thu, 9 Jan 2025 14:03:26 -0300 Subject: [PATCH 02/35] line and scatter, group by x axis, x axis sort --- apps/api/src/python/visualization-v2.test.ts | 176 ++++++++++++- apps/api/src/python/visualizations-v2.ts | 233 ++++++++++++++---- apps/api/src/yjs/v2/executor/visualization.ts | 7 +- .../customBlocks/visualizationV2/index.tsx | 7 +- .../editor/src/blocks/visualization-v2.ts | 15 +- 5 files changed, 383 insertions(+), 55 deletions(-) diff --git a/apps/api/src/python/visualization-v2.test.ts b/apps/api/src/python/visualization-v2.test.ts index 60f0ec57..d0eb9a0d 100644 --- a/apps/api/src/python/visualization-v2.test.ts +++ b/apps/api/src/python/visualization-v2.test.ts @@ -64,7 +64,6 @@ async function getPythonRunner( switch (message.header.msg_type) { case 'stream': if ('name' in message.content) { - console.log(message.content.text) onOutputs([ { type: 'stdio', @@ -139,8 +138,8 @@ describe('.createVisualizationV2', () => { const code = `import pandas as pd df = pd.DataFrame({ - 'integers': [1, 2, 3], - 'datetimes': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03']), + 'integers': [11, 12, 13, 21, 22, 33], + 'datetimes': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03', '2021-02-01', '2021-03-02', '2021-03-03']), })` const integersDFColumn: DataFrameColumn = { @@ -187,9 +186,175 @@ df = pd.DataFrame({ ], }, result: { + dataset: { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + ], + }, + xAxis: [ + { + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + type: 'bar', + }, + ], + }, + }, + { + name: 'integer by integer groupedColumn', + input: { + dataframeName: 'df', + chartType: 'groupedColumn', + xAxis: integersDFColumn, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: null, + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + dataset: { + dimensions: ['integers', 'integers'], + source: [ + { integers: 11 }, + { integers: 12 }, + { integers: 13 }, + { integers: 21 }, + { integers: 22 }, + { integers: 33 }, + ], + }, + xAxis: [ + { + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + type: 'bar', + }, + ], + }, + }, + { + name: 'datetime by integer group by month', + input: { + dataframeName: 'df', + chartType: 'groupedColumn', + xAxis: datetimesDFColumn, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: 'month', + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + dataset: { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-01T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-01T00:00:00', integers: 22 }, + { datetimes: '2021-03-01T00:00:00', integers: 33 }, + ], + }, + xAxis: [ + { + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + type: 'bar', + }, + ], + }, + }, + { + name: 'datetime desc by integer groupedColumn', + input: { + dataframeName: 'df', + chartType: 'groupedColumn', + xAxis: datetimesDFColumn, + xAxisName: null, + xAxisSort: 'descending', + xAxisGroupFunction: null, + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + dataset: { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + ], + }, xAxis: [ { - data: [1, 2, 3], type: 'category', }, ], @@ -200,7 +365,6 @@ df = pd.DataFrame({ ], series: [ { - data: [1, 2, 3], type: 'bar', }, ], @@ -235,7 +399,7 @@ df = pd.DataFrame({ expect(result.success).toBe(true) if (result.success) { - expect(result.output.result).toEqual(result) + expect(result.data).toEqual(test.result) } }) } diff --git a/apps/api/src/python/visualizations-v2.ts b/apps/api/src/python/visualizations-v2.ts index 64a7697c..3ed765f2 100644 --- a/apps/api/src/python/visualizations-v2.ts +++ b/apps/api/src/python/visualizations-v2.ts @@ -9,10 +9,11 @@ import { executeCode, PythonExecutionError } from './index.js' import { IJupyterManager } from '../jupyter/index.js' import { VisualizationV2BlockInput, - VisualizationV2BlockOutput, + VisualizationV2BlockOutputResult, } from '@briefer/editor' import AggregateError from 'aggregate-error' import { z } from 'zod' +import { logger } from '../logger.js' function getCode(dataframe: DataFrame, input: VisualizationV2BlockInput) { const strInput = JSON.stringify(input) @@ -20,34 +21,135 @@ function getCode(dataframe: DataFrame, input: VisualizationV2BlockInput) { from datetime import datetime def _briefer_create_visualization(df, options): - x_axis = [{ - "type": "category", - "data": df[options["xAxis"]["name"]].tolist() - }] - y_axis = [] - batata = [] - - for y_axis_options in options["yAxes"]: - y_axis.append({ - "type": "value", - }) - for series_options in y_axis_options["series"]: - batata.append({ - "type": "bar", - "data": df[series_options["column"]["name"]].tolist() - }) - - print(json.dumps({ - "success": True, - "output": { - "executedAt": datetime.now().isoformat(), - "result":{ - "xAxis": x_axis, - "yAxis": y_axis, - "series": batata - } - } - })) + def extract_chart_type(chartType): + if chartType == "groupedColumn": + return "bar" + elif chartType == "stackedColumn": + return "bar" + elif chartType == "hundredPercentStackedColumn": + return "bar" + elif chartType == "line": + return "line" + elif chartType == "area": + return "line" + elif chartType == "hundredPercentStackedArea": + return "line" + elif chartType == "scatterPlot": + return "scatter" + elif chartType == "pie": + raise ValueError("Pie chart is not implemented yet") + elif chartType == "histogram": + raise ValueError("Histogram chart is not supported") + elif chartType == "trend": + raise ValueError("Trend chart is not supported") + elif chartType == "number": + raise ValueError("Number chart is not supported") + + def convert_value(column, value): + if pd.api.types.is_numeric_dtype(column): + return pd.to_numeric(value, errors='coerce') + + if pd.api.types.is_datetime64_any_dtype(column): + return value.isoformat() + + return value + + def group_dataframe(df, options): + if options["xAxisGroupFunction"]: + freq = { + 'year': 'Y', + 'quarter': 'Q', + 'month': 'M', + 'week': 'W', + 'date': 'D', + 'hours': 'h', + 'minutes': 'min', + 'seconds': 's' + }.get(options["xAxisGroupFunction"], None) + + if freq: + df[options["xAxis"]["name"]] = pd.to_datetime(df[options["xAxis"]["name"]]) + # Group by the specified frequency but keep all rows + df["_grouped"] = df[options["xAxis"]["name"]].dt.to_period(freq).dt.start_time + return df + + return df + + def sort_dataframe(df, options): + if options["xAxisSort"]: + return df.sort_values( + by=options["xAxis"]["name"], + ascending=options["xAxisSort"] == "ascending" + ) + + return df + + def prepare_chart_df(df, options): + # Prepare data by grouping + result = group_dataframe(df.copy(), options) + if "_grouped" in result: + result[options["xAxis"]["name"]] = result["_grouped"] + result = result.drop(columns=["_grouped"]) + + result = sort_dataframe(result, options) + + return result + + + chart_df = prepare_chart_df(df, options) + + + data = { + "dataset": { + "dimensions": [options["xAxis"]["name"]], + "source": [], + }, + "xAxis": [{ + "type": "category", + }], + "yAxis": [], + "series": [], + } + + + defaultType = extract_chart_type(options["chartType"]) + for y_axis in options["yAxes"]: + for series in y_axis["series"]: + chart_type = extract_chart_type(series["chartType"] or options["chartType"]) + data["dataset"]["dimensions"].append(series["column"]["name"]) + data["yAxis"].append({ + "type": "value", + }) + data["series"].append({ + "type": chart_type, + }) + + index = 0 + for _, row in chart_df.iterrows(): + x_name = options["xAxis"]["name"] + x_value = convert_value(chart_df[x_name], row[x_name]) + + data["dataset"]["source"].append({ + x_name: x_value, + }) + for y_axis in options["yAxes"]: + for series in y_axis["series"]: + y_name = series["column"]["name"] + y_value = convert_value(chart_df[y_name], row[y_name]) + + data["dataset"]["source"][index][y_name] = y_value + index += 1 + + + output = json.dumps({ + "type": "result", + "data": { + "success": True, + "data": data + } + }, default=str) + + print(output) if "${dataframe.name}" in globals(): @@ -55,7 +157,16 @@ if "${dataframe.name}" in globals(): options = json.loads(${JSON.stringify(strInput)}) _briefer_create_visualization(df, options) else: - print(json.dumps({"success": False, "reason": "dataframe-not-found"}))` + output = json.dumps({ + "type":"result", + "data": { + "success": False, + "reason": "dataframe-not-found" + } + }, default=str) + print(output)` + + console.log(code) return code } @@ -63,7 +174,7 @@ else: const CreateVisualizationResult = z.union([ z.object({ success: z.literal(true), - output: VisualizationV2BlockOutput, + data: VisualizationV2BlockOutputResult, }), z.object({ success: z.literal(false), @@ -118,21 +229,59 @@ export async function createVisualizationV2( case 'stdio': switch (output.name) { case 'stdout': - for (const line of output.text.split('\n')) { - if (!result?.success) { - try { - console.log(line) - console.log(line) - console.log(JSON.parse(line)) - } catch (e) { - console.log(e) - } + for (const l of output.text.split('\n')) { + const line = l.trim() + if (line === '') { + continue + } + if (!result?.success) { const parsed = jsonString - .pipe(CreateVisualizationResult) + .pipe( + z.union([ + z.object({ + type: z.literal('log'), + message: z.string(), + }), + z.object({ + type: z.literal('result'), + data: CreateVisualizationResult, + }), + ]) + ) .safeParse(line.trim()) if (parsed.success) { - result = parsed.data + switch (parsed.data.type) { + case 'log': + console.log( + JSON.stringify( + { + workspaceId, + sessionId, + message: parsed.data.message, + input, + }, + null, + 2 + ), + 'createVisualizationV2 log' + ) + logger().info( + { + workspaceId, + sessionId, + message: parsed.data.message, + input, + }, + 'createVisualizationV2 log' + ) + break + case 'result': + result = parsed.data.data + break + default: + exhaustiveCheck(parsed.data) + } } else { outputParsingErrors.push(parsed.error) } diff --git a/apps/api/src/yjs/v2/executor/visualization.ts b/apps/api/src/yjs/v2/executor/visualization.ts index 86202b53..6739fb7d 100644 --- a/apps/api/src/yjs/v2/executor/visualization.ts +++ b/apps/api/src/yjs/v2/executor/visualization.ts @@ -276,8 +276,11 @@ export class VisualizationExecutor implements IVisualizationExecutor { events.visUpdate(attrs.input.chartType) if (result.success) { - console.log(result.output) - block.setAttribute('output', result.output) + const output = { + executedAt: new Date().toISOString(), + result: result.data, + } + block.setAttribute('output', output) } else { } executionItem.setCompleted('success') diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx index b041c92e..c6c6bbab 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/index.tsx @@ -255,9 +255,12 @@ function VisualizationV2Block(props: Props) { const onChangeXAxisSort = useCallback( (sort: 'ascending' | 'descending') => { - // props.block.setAttribute('xAxisSort', sort) + props.block.setAttribute('input', { + ...attrs.input, + xAxisSort: sort, + }) }, - [props.block] + [props.block, attrs.input] ) const onChangeHistogramFormat = useCallback( diff --git a/packages/editor/src/blocks/visualization-v2.ts b/packages/editor/src/blocks/visualization-v2.ts index 74098d98..6011b81c 100644 --- a/packages/editor/src/blocks/visualization-v2.ts +++ b/packages/editor/src/blocks/visualization-v2.ts @@ -49,7 +49,6 @@ const OrdinalRawValue = z.string().or(z.number()) const CategoryAxisBaseOption = z.object({ type: z.literal('category'), - data: z.array(OrdinalRawValue), }) const TimeAxisBaseOption = z.object({ @@ -68,13 +67,23 @@ const CartesianAxisOption = z }) .and(AxisBaseOption) +const DataSet = z.object({ + dimensions: z.array(z.string()), + source: z.array(z.record(OrdinalRawValue)), +}) + +const EchartsType = z.union([ + z.literal('bar'), + z.literal('line'), + z.literal('scatter'), +]) export const VisualizationV2BlockOutputResult = z.object({ + dataset: DataSet, xAxis: z.array(CartesianAxisOption), yAxis: z.array(CartesianAxisOption), series: z.array( z.object({ - data: z.array(OrdinalRawValue), - type: z.literal('bar'), + type: EchartsType, }) ), }) From f69b10d45572caa38661390ff30c8b537ec6d6d4 Mon Sep 17 00:00:00 2001 From: Lucas Vieira Date: Thu, 9 Jan 2025 14:16:52 -0300 Subject: [PATCH 03/35] area chart --- apps/api/src/python/visualization-v2.test.ts | 53 +++++++++++++++++++ apps/api/src/python/visualizations-v2.ts | 28 +++++----- .../editor/src/blocks/visualization-v2.ts | 18 +++---- 3 files changed, 78 insertions(+), 21 deletions(-) diff --git a/apps/api/src/python/visualization-v2.test.ts b/apps/api/src/python/visualization-v2.test.ts index d0eb9a0d..299407e6 100644 --- a/apps/api/src/python/visualization-v2.test.ts +++ b/apps/api/src/python/visualization-v2.test.ts @@ -370,6 +370,59 @@ df = pd.DataFrame({ ], }, }, + { + name: 'datetime by integer area', + input: { + dataframeName: 'df', + chartType: 'area', + xAxis: datetimesDFColumn, + xAxisName: null, + xAxisSort: 'descending', + xAxisGroupFunction: null, + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + dataset: { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + ], + }, + xAxis: [ + { + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + type: 'line', + areaStyle: {}, + }, + ], + }, + }, ] for (const test of cases) { diff --git a/apps/api/src/python/visualizations-v2.ts b/apps/api/src/python/visualizations-v2.ts index 3ed765f2..92b44f52 100644 --- a/apps/api/src/python/visualizations-v2.ts +++ b/apps/api/src/python/visualizations-v2.ts @@ -23,19 +23,19 @@ from datetime import datetime def _briefer_create_visualization(df, options): def extract_chart_type(chartType): if chartType == "groupedColumn": - return "bar" + return "bar", False elif chartType == "stackedColumn": - return "bar" + return "bar", False elif chartType == "hundredPercentStackedColumn": - return "bar" + return "bar", False elif chartType == "line": - return "line" + return "line", False elif chartType == "area": - return "line" + return "line", True elif chartType == "hundredPercentStackedArea": - return "line" + return "line", True elif chartType == "scatterPlot": - return "scatter" + return "scatter", False elif chartType == "pie": raise ValueError("Pie chart is not implemented yet") elif chartType == "histogram": @@ -112,17 +112,21 @@ def _briefer_create_visualization(df, options): } - defaultType = extract_chart_type(options["chartType"]) + defaultType, _ = extract_chart_type(options["chartType"]) for y_axis in options["yAxes"]: for series in y_axis["series"]: - chart_type = extract_chart_type(series["chartType"] or options["chartType"]) + chart_type, is_area = extract_chart_type(series["chartType"] or options["chartType"]) data["dataset"]["dimensions"].append(series["column"]["name"]) data["yAxis"].append({ "type": "value", }) - data["series"].append({ - "type": chart_type, - }) + serie = { + "type": chart_type + } + if is_area: + serie["areaStyle"] = {} + + data["series"].append(serie) index = 0 for _, row in chart_df.iterrows(): diff --git a/packages/editor/src/blocks/visualization-v2.ts b/packages/editor/src/blocks/visualization-v2.ts index 6011b81c..a1a8462b 100644 --- a/packages/editor/src/blocks/visualization-v2.ts +++ b/packages/editor/src/blocks/visualization-v2.ts @@ -72,20 +72,20 @@ const DataSet = z.object({ source: z.array(z.record(OrdinalRawValue)), }) -const EchartsType = z.union([ - z.literal('bar'), - z.literal('line'), - z.literal('scatter'), +const Serie = z.union([ + z.object({ + type: z.union([z.literal('bar'), z.literal('scatter')]), + }), + z.object({ + type: z.literal('line'), + areaStyle: z.object({}).optional(), + }), ]) export const VisualizationV2BlockOutputResult = z.object({ dataset: DataSet, xAxis: z.array(CartesianAxisOption), yAxis: z.array(CartesianAxisOption), - series: z.array( - z.object({ - type: EchartsType, - }) - ), + series: z.array(Serie), }) export type VisualizationV2BlockOutputResult = z.infer< From 4d7434675a5b50bd704f3f736481cf68a775e2f6 Mon Sep 17 00:00:00 2001 From: Lucas Vieira Date: Thu, 9 Jan 2025 15:20:59 -0300 Subject: [PATCH 04/35] support multiple series --- apps/api/src/python/visualization-v2.test.ts | 202 +++++++++++++----- apps/api/src/python/visualizations-v2.ts | 56 +++-- .../editor/src/blocks/visualization-v2.ts | 4 +- 3 files changed, 175 insertions(+), 87 deletions(-) diff --git a/apps/api/src/python/visualization-v2.test.ts b/apps/api/src/python/visualization-v2.test.ts index 299407e6..fa8f78c1 100644 --- a/apps/api/src/python/visualization-v2.test.ts +++ b/apps/api/src/python/visualization-v2.test.ts @@ -186,17 +186,19 @@ df = pd.DataFrame({ ], }, result: { - dataset: { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - ], - }, + dataset: [ + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + ], + }, + ], xAxis: [ { type: 'category', @@ -210,6 +212,7 @@ df = pd.DataFrame({ series: [ { type: 'bar', + datasetIndex: 0, }, ], }, @@ -238,17 +241,19 @@ df = pd.DataFrame({ ], }, result: { - dataset: { - dimensions: ['integers', 'integers'], - source: [ - { integers: 11 }, - { integers: 12 }, - { integers: 13 }, - { integers: 21 }, - { integers: 22 }, - { integers: 33 }, - ], - }, + dataset: [ + { + dimensions: ['integers', 'integers'], + source: [ + { integers: 11 }, + { integers: 12 }, + { integers: 13 }, + { integers: 21 }, + { integers: 22 }, + { integers: 33 }, + ], + }, + ], xAxis: [ { type: 'category', @@ -262,6 +267,7 @@ df = pd.DataFrame({ series: [ { type: 'bar', + datasetIndex: 0, }, ], }, @@ -290,17 +296,19 @@ df = pd.DataFrame({ ], }, result: { - dataset: { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-01T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-01T00:00:00', integers: 22 }, - { datetimes: '2021-03-01T00:00:00', integers: 33 }, - ], - }, + dataset: [ + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-01T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-01T00:00:00', integers: 22 }, + { datetimes: '2021-03-01T00:00:00', integers: 33 }, + ], + }, + ], xAxis: [ { type: 'category', @@ -314,6 +322,7 @@ df = pd.DataFrame({ series: [ { type: 'bar', + datasetIndex: 0, }, ], }, @@ -342,17 +351,19 @@ df = pd.DataFrame({ ], }, result: { - dataset: { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - ], - }, + dataset: [ + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + ], + }, + ], xAxis: [ { type: 'category', @@ -366,6 +377,7 @@ df = pd.DataFrame({ series: [ { type: 'bar', + datasetIndex: 0, }, ], }, @@ -394,17 +406,19 @@ df = pd.DataFrame({ ], }, result: { - dataset: { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - ], - }, + dataset: [ + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + ], + }, + ], xAxis: [ { type: 'category', @@ -419,6 +433,84 @@ df = pd.DataFrame({ { type: 'line', areaStyle: {}, + datasetIndex: 0, + }, + ], + }, + }, + { + name: 'datetime by integer multi series', + input: { + dataframeName: 'df', + chartType: 'groupedColumn', + xAxis: datetimesDFColumn, + xAxisName: null, + xAxisSort: 'ascending', + xAxisGroupFunction: null, + yAxes: [ + { + series: [ + { + axisName: null, + chartType: null, + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + { + axisName: null, + chartType: 'line', + column: integersDFColumn, + aggregateFunction: null, + colorBy: null, + }, + ], + }, + ], + }, + result: { + dataset: [ + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + ], + }, + { + dimensions: ['datetimes', 'integers'], + source: [ + { datetimes: '2021-01-01T00:00:00', integers: 11 }, + { datetimes: '2021-01-02T00:00:00', integers: 12 }, + { datetimes: '2021-01-03T00:00:00', integers: 13 }, + { datetimes: '2021-02-01T00:00:00', integers: 21 }, + { datetimes: '2021-03-02T00:00:00', integers: 22 }, + { datetimes: '2021-03-03T00:00:00', integers: 33 }, + ], + }, + ], + xAxis: [ + { + type: 'category', + }, + ], + yAxis: [ + { + type: 'value', + }, + ], + series: [ + { + type: 'bar', + datasetIndex: 0, + }, + { + type: 'line', + datasetIndex: 1, }, ], }, diff --git a/apps/api/src/python/visualizations-v2.ts b/apps/api/src/python/visualizations-v2.ts index 92b44f52..bb75ed7f 100644 --- a/apps/api/src/python/visualizations-v2.ts +++ b/apps/api/src/python/visualizations-v2.ts @@ -84,7 +84,7 @@ def _briefer_create_visualization(df, options): return df - def prepare_chart_df(df, options): + def get_series_df(df, options, y_axis, series): # Prepare data by grouping result = group_dataframe(df.copy(), options) if "_grouped" in result: @@ -96,14 +96,8 @@ def _briefer_create_visualization(df, options): return result - chart_df = prepare_chart_df(df, options) - - data = { - "dataset": { - "dimensions": [options["xAxis"]["name"]], - "source": [], - }, + "dataset": [], "xAxis": [{ "type": "category", }], @@ -111,40 +105,40 @@ def _briefer_create_visualization(df, options): "series": [], } - defaultType, _ = extract_chart_type(options["chartType"]) for y_axis in options["yAxes"]: + data["yAxis"].append({ + "type": "value", + }) + for series in y_axis["series"]: + series_dataframe = get_series_df(df, options, y_axis, series) + chart_type, is_area = extract_chart_type(series["chartType"] or options["chartType"]) - data["dataset"]["dimensions"].append(series["column"]["name"]) - data["yAxis"].append({ - "type": "value", - }) + dataset_index = len(data["dataset"]) + dataset = { + "dimensions": [options["xAxis"]["name"], series["column"]["name"]], + "source": [], + } + for _, row in series_dataframe.iterrows(): + x_name = options["xAxis"]["name"] + x_value = convert_value(series_dataframe[x_name], row[x_name]) + + y_name = series["column"]["name"] + y_value = convert_value(series_dataframe[y_name], row[y_name]) + dataset["source"].append({x_name: x_value, y_name: y_value}) + + data["dataset"].append(dataset) + serie = { - "type": chart_type + "type": chart_type, + "datasetIndex": dataset_index } if is_area: serie["areaStyle"] = {} data["series"].append(serie) - index = 0 - for _, row in chart_df.iterrows(): - x_name = options["xAxis"]["name"] - x_value = convert_value(chart_df[x_name], row[x_name]) - - data["dataset"]["source"].append({ - x_name: x_value, - }) - for y_axis in options["yAxes"]: - for series in y_axis["series"]: - y_name = series["column"]["name"] - y_value = convert_value(chart_df[y_name], row[y_name]) - - data["dataset"]["source"][index][y_name] = y_value - index += 1 - - output = json.dumps({ "type": "result", "data": { diff --git a/packages/editor/src/blocks/visualization-v2.ts b/packages/editor/src/blocks/visualization-v2.ts index a1a8462b..f11140ce 100644 --- a/packages/editor/src/blocks/visualization-v2.ts +++ b/packages/editor/src/blocks/visualization-v2.ts @@ -75,14 +75,16 @@ const DataSet = z.object({ const Serie = z.union([ z.object({ type: z.union([z.literal('bar'), z.literal('scatter')]), + datasetIndex: z.number(), }), z.object({ type: z.literal('line'), areaStyle: z.object({}).optional(), + datasetIndex: z.number(), }), ]) export const VisualizationV2BlockOutputResult = z.object({ - dataset: DataSet, + dataset: z.array(DataSet), xAxis: z.array(CartesianAxisOption), yAxis: z.array(CartesianAxisOption), series: z.array(Serie), From 3bd0b290cb27a9f329f17192325f25295a9fd35f Mon Sep 17 00:00:00 2001 From: Lucas Vieira Date: Thu, 9 Jan 2025 15:49:56 -0300 Subject: [PATCH 05/35] echarts aggregate --- .../visualization-v2.test.ts.snap | 37081 ++++++++++++++++ apps/api/src/python/visualization-v2.test.ts | 582 +- apps/api/src/python/visualizations-v2.ts | 147 +- apps/api/src/yjs/v2/executor/visualization.ts | 1 + apps/web/prod/next.config.js | 46 + apps/web/prod/package.json | 171 + .../src/components/Dashboard/GridElement.tsx | 3 +- .../v2Editor/customBlocks/sql/index.tsx | 2 +- .../customBlocks/visualizationV2/Combobox.tsx | 2 +- .../visualizationV2/FilterSelector.tsx | 8 +- .../visualizationV2/MultiCombobox.tsx | 2 +- .../visualizationV2/VisualizationControls.tsx | 429 +- .../VisualizationSettingTabs.tsx | 2 +- .../visualizationV2/VisualizationToggle.tsx | 4 +- .../visualizationV2/VisualizationView.tsx | 315 +- .../visualizationV2/YAxisPicker.tsx | 24 +- .../customBlocks/visualizationV2/index.tsx | 286 +- .../editor/src/blocks/visualization-v2.ts | 55 +- packages/types/src/index.ts | 12 +- 19 files changed, 38343 insertions(+), 829 deletions(-) create mode 100644 apps/api/src/python/__snapshots__/visualization-v2.test.ts.snap create mode 100644 apps/web/prod/next.config.js create mode 100644 apps/web/prod/package.json diff --git a/apps/api/src/python/__snapshots__/visualization-v2.test.ts.snap b/apps/api/src/python/__snapshots__/visualization-v2.test.ts.snap new file mode 100644 index 00000000..d2d90044 --- /dev/null +++ b/apps/api/src/python/__snapshots__/visualization-v2.test.ts.snap @@ -0,0 +1,37081 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`.createVisualizationV2 0049d2ee3adf5da35182391b5f73a0a7b65b288c6bbc1463f6260d8d618b151f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 0049d2ee3adf5da35182391b5f73a0a7b65b288c6bbc1463f6260d8d618b151f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 02f414cc977fe6db0d5c70bd9897a7ce1647cb2ad104e96c4d2532282cd4ae3d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 02f414cc977fe6db0d5c70bd9897a7ce1647cb2ad104e96c4d2532282cd4ae3d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 03d6964bb47a5aef82305beb9a287430ea2c3b334733be9f88a5663b3568a728 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 03d6964bb47a5aef82305beb9a287430ea2c3b334733be9f88a5663b3568a728 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 05ca13b1981505485f5da8fc84f645b152e021c767272141d467846588a8b200 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 05ca13b1981505485f5da8fc84f645b152e021c767272141d467846588a8b200 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 05e9ae34d39b3ac3af1af1a37c713e497f80fb07d476ec0401424db22b5c14a9 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 05e9ae34d39b3ac3af1af1a37c713e497f80fb07d476ec0401424db22b5c14a9 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 05efa085d98909b4bffd2bffa306a6cd90b4aabedd486fbb617bcb810400519a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 05efa085d98909b4bffd2bffa306a6cd90b4aabedd486fbb617bcb810400519a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 07d782066ff66a41ac88974acffffc64274649dc9a94da5cab688f56195d70ac 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 07d782066ff66a41ac88974acffffc64274649dc9a94da5cab688f56195d70ac 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 08f9028957cc77dfcd9aa6b9c21b80bf86e0f93fb22009188f2d55857b3d8cf7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 08f9028957cc77dfcd9aa6b9c21b80bf86e0f93fb22009188f2d55857b3d8cf7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 023d2d73f17324bac076ae7139e449649b7ab3c6d2a315a46e5dce8f38b30d09 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 023d2d73f17324bac076ae7139e449649b7ab3c6d2a315a46e5dce8f38b30d09 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 050d2a44fa19d5ccbd5c46de8c8f2e40ca14e557f4546578cffb9ff85e3fcdc8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 050d2a44fa19d5ccbd5c46de8c8f2e40ca14e557f4546578cffb9ff85e3fcdc8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 09220ddeb57cc03b578b55cabf34de9f972d9c75a1a130cf67f20caa3dbdf148 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 09220ddeb57cc03b578b55cabf34de9f972d9c75a1a130cf67f20caa3dbdf148 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 0104434f236143cfee3172101ea194b0eace3aac8f233ef2871ad4bafbe06dc6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 0104434f236143cfee3172101ea194b0eace3aac8f233ef2871ad4bafbe06dc6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 0786221b873de7bf12a008de3a5aa7d8f7aa5d1b438422b4feebe0cc78ca9fff 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 0786221b873de7bf12a008de3a5aa7d8f7aa5d1b438422b4feebe0cc78ca9fff 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 3.6, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 4.300000000000001, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 010570755f232716265dc68f1c7cada34bfc0dae6de74e2c2453b15b7c8c2eed 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 010570755f232716265dc68f1c7cada34bfc0dae6de74e2c2453b15b7c8c2eed 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 0b655c862afea56e00caeff326cc5ddf25236eebbfbcf4bb1982012cf9e24fe1 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 0b655c862afea56e00caeff326cc5ddf25236eebbfbcf4bb1982012cf9e24fe1 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 0bff564d5b882ae575e0c2acb1b2a4711206dfae1654e0cd7715591b91e1b60d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 0bff564d5b882ae575e0c2acb1b2a4711206dfae1654e0cd7715591b91e1b60d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1a0e1100e95d4358c74de10773a2b7502be598cd5fad5f8d17c6b9c7b38032a8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1a0e1100e95d4358c74de10773a2b7502be598cd5fad5f8d17c6b9c7b38032a8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1a46cc3e1383243c974810864374eb03bbfa7b27ff0d71557b4d961e7ceee6cf 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1a46cc3e1383243c974810864374eb03bbfa7b27ff0d71557b4d961e7ceee6cf 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1ac4fd933a334e63319b47de2286e4526067cfc8e36b0e1c6b31192227d92dbc 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1ac4fd933a334e63319b47de2286e4526067cfc8e36b0e1c6b31192227d92dbc 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1c754b700f2fafe804039932589c2f0d37b45c5741f2c16352a2243f99302b7a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1c754b700f2fafe804039932589c2f0d37b45c5741f2c16352a2243f99302b7a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1e987f28c1269f1d8a9ec1fbfb6a35eb0b4b01a1252b1cd90e4c0e0063347b76 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1e987f28c1269f1d8a9ec1fbfb6a35eb0b4b01a1252b1cd90e4c0e0063347b76 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1f617e67a252c9720e1e02a06a3d79fe66de3df6ecb0672ed8b8b9709f1c5e9a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1f617e67a252c9720e1e02a06a3d79fe66de3df6ecb0672ed8b8b9709f1c5e9a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1ff80537a32536e5cc26e2ab997faee6ccca21f838a8ae6d3def53ae1e649f02 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1ff80537a32536e5cc26e2ab997faee6ccca21f838a8ae6d3def53ae1e649f02 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 2b000ad24cfb76baee410cafb50c64af35fb1588876c02fb2c9c671b6c02d062 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 2b000ad24cfb76baee410cafb50c64af35fb1588876c02fb2c9c671b6c02d062 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 2c20daaf97251c268e2f83ae1dd6f5321d75c0a9041dcefe52a278c6ec073fc9 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 2c20daaf97251c268e2f83ae1dd6f5321d75c0a9041dcefe52a278c6ec073fc9 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 2eab43b96e8284297714f329717e6bb23fa299baf951620cc6a1c797d3909b73 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 2eab43b96e8284297714f329717e6bb23fa299baf951620cc6a1c797d3909b73 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3a524b10fd86dd9771d8498c0907582a3a6a76256a03a375dd7473fa1150f145 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3a524b10fd86dd9771d8498c0907582a3a6a76256a03a375dd7473fa1150f145 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3a939248fccc1f928ffcc4edfb042fd6170c9324c13b2d4f580adfc2e2bb70c6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3a939248fccc1f928ffcc4edfb042fd6170c9324c13b2d4f580adfc2e2bb70c6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3ae298939adee29dda833ef55c6be128df9a53ac1f9255dcded27a66b6c9be25 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3ae298939adee29dda833ef55c6be128df9a53ac1f9255dcded27a66b6c9be25 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3c75e977ca42cec3cf77355a7d7f18a7d492cac2ce1201a4b77f1ac966f484ed 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3c75e977ca42cec3cf77355a7d7f18a7d492cac2ce1201a4b77f1ac966f484ed 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3ce0cb0b2d8cc7f0d415adf3be9bd5ef6d8a3dd78ee08eb36fdc3b13ea377f69 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3ce0cb0b2d8cc7f0d415adf3be9bd5ef6d8a3dd78ee08eb36fdc3b13ea377f69 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3f62d9687aa7e02af2b6c59479bb11421ad2c7f7857834902642aa9eede5c207 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3f62d9687aa7e02af2b6c59479bb11421ad2c7f7857834902642aa9eede5c207 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4a9d44ed92cf44df5a175b43ee67786d5a0c7fbc385177013d0fe8d80912c8b2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4a9d44ed92cf44df5a175b43ee67786d5a0c7fbc385177013d0fe8d80912c8b2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4a130d96e3cacece5ceeeae06bc5286b828be10c3228ebb7a2edb893c3cdc97e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4a130d96e3cacece5ceeeae06bc5286b828be10c3228ebb7a2edb893c3cdc97e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4c4fdedcefc85b69dba330253067c7557da446d1b7aff403f6a67ec211315ad7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4c4fdedcefc85b69dba330253067c7557da446d1b7aff403f6a67ec211315ad7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4ca7d2b8f74efa21fbf1b078ebf58982f6dd681a3bc6c79292f22a54a7ec0bd2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4ca7d2b8f74efa21fbf1b078ebf58982f6dd681a3bc6c79292f22a54a7ec0bd2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4cbf01cc532bef277d6dc195a1aebf1f7c4b2e0ca998dfceeb7925a473b45f60 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4cbf01cc532bef277d6dc195a1aebf1f7c4b2e0ca998dfceeb7925a473b45f60 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4edbda3eaa54924f8fc5b5bbf1608a2c8c9886694e9cf333edaa229f95c8b22f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4edbda3eaa54924f8fc5b5bbf1608a2c8c9886694e9cf333edaa229f95c8b22f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4fb231525de47328785693a2485851866792f87cf4411a12af96da33107b2457 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4fb231525de47328785693a2485851866792f87cf4411a12af96da33107b2457 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5af0c4dcd7bcb6b802f227ccb630368b252d875cf04cc0ca828e540f7c94feb2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5af0c4dcd7bcb6b802f227ccb630368b252d875cf04cc0ca828e540f7c94feb2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5c2ab5d96c58d6474c87d17884f026e6a8eba28e162a3c85074854ae09165559 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5c2ab5d96c58d6474c87d17884f026e6a8eba28e162a3c85074854ae09165559 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5c32c59b6abeb6969bd6b27c0369ce33b09b7220566000f9b0552d8c7c0ef6b6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5c32c59b6abeb6969bd6b27c0369ce33b09b7220566000f9b0552d8c7c0ef6b6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5c61577b0f98ecf1426cbcf818b9fe9a73b7e8f7457d05c8ef8bfb68b977b798 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5c61577b0f98ecf1426cbcf818b9fe9a73b7e8f7457d05c8ef8bfb68b977b798 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5cc71b0083032299ecab9237c9a77a9ab8109684aeb1b0843465982273861e2f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5cc71b0083032299ecab9237c9a77a9ab8109684aeb1b0843465982273861e2f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5cfdeb77ae57cf17b02fe57d7a009f88555aede19e6594ce5f8a4f9cc0fc4bc5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5cfdeb77ae57cf17b02fe57d7a009f88555aede19e6594ce5f8a4f9cc0fc4bc5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5dc49f5f1c003f1d63ba5f19705015a3c5512d08cf9662f1375fdf05faf88d62 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5dc49f5f1c003f1d63ba5f19705015a3c5512d08cf9662f1375fdf05faf88d62 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5fc9890b65cdb702e0f90ab089130ff9c5020dc59418cc11e362a7553df5a3e3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5fc9890b65cdb702e0f90ab089130ff9c5020dc59418cc11e362a7553df5a3e3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5fee275381c622c72cb1338e0ae78bd596d945299c4f64776d146b591c299af4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5fee275381c622c72cb1338e0ae78bd596d945299c4f64776d146b591c299af4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 6b26396c605e1750a483b6cc5b5e355588aad520d28850ea98721deafd8cfbe8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 6b26396c605e1750a483b6cc5b5e355588aad520d28850ea98721deafd8cfbe8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 6ca2e23bdd4228c3f2eb1dd84cd8c0708ea2ad80ceee788e163b1b58cedd0c79 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 6ca2e23bdd4228c3f2eb1dd84cd8c0708ea2ad80ceee788e163b1b58cedd0c79 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 6d24977786fcf80d7302ab6cd378c105585f4828453164c20ab11cc11ab5024d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 6d24977786fcf80d7302ab6cd378c105585f4828453164c20ab11cc11ab5024d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 7ab4d52a42fec7152f9fbf2e445481341af35ee28bedc088e904691ed97b09d5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 7ab4d52a42fec7152f9fbf2e445481341af35ee28bedc088e904691ed97b09d5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 7b8a1c03831cd79b5ab6ec05bc3a5bdcc9e115baade5bc62d2f25a235ae4def4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 7b8a1c03831cd79b5ab6ec05bc3a5bdcc9e115baade5bc62d2f25a235ae4def4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 7b7164414fb8d5f8e66a746f1e393b23e87cb924a4fe9fddd1057c1bf1aa113f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 7b7164414fb8d5f8e66a746f1e393b23e87cb924a4fe9fddd1057c1bf1aa113f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 7dad176b89e7d17d7e55fff957c22e84619efbfb80c9fe3cdb486b765ceaf84b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 7dad176b89e7d17d7e55fff957c22e84619efbfb80c9fe3cdb486b765ceaf84b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 8c094f18b659ac342c757a8594e0aad869f35e49683b47809619f8cd149d5bef 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 8c094f18b659ac342c757a8594e0aad869f35e49683b47809619f8cd149d5bef 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 8c3f3305bbf10d57e41c302ae7716724d5719b6170363aa63c910bd6688d52e3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 8c3f3305bbf10d57e41c302ae7716724d5719b6170363aa63c910bd6688d52e3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 8dcafa06c43f134091b2307d751180380f670f3f82794fcb1f3e7bcdf16aa981 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 8dcafa06c43f134091b2307d751180380f670f3f82794fcb1f3e7bcdf16aa981 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 8f34ab2ee8f4b773f0f18d8dc8d472e9ee102398cd77049f3c08e080814118e3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 8f34ab2ee8f4b773f0f18d8dc8d472e9ee102398cd77049f3c08e080814118e3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9c3f803571956b8b421c14da6aaff7524015d97e72c00406bfa818fddb2cc6d9 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9c3f803571956b8b421c14da6aaff7524015d97e72c00406bfa818fddb2cc6d9 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9c76b09e61d975fbe2383c79292ebff743158778a08a084d57e41b41043b861a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9c76b09e61d975fbe2383c79292ebff743158778a08a084d57e41b41043b861a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9d53660da3b3ec3f5b1b362aaa97151966d92002fded0aea4d0943d1e7047bb4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9d53660da3b3ec3f5b1b362aaa97151966d92002fded0aea4d0943d1e7047bb4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9f83007bef783e12d9138a5e8e85473c33c3678794bf4efb161d55f8565c31d6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9f83007bef783e12d9138a5e8e85473c33c3678794bf4efb161d55f8565c31d6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 11bdc12dd8967f675fd9c0b22c85059b17a89c8b3d1f58b47e9ca8cf748ae16f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 11bdc12dd8967f675fd9c0b22c85059b17a89c8b3d1f58b47e9ca8cf748ae16f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 12ef739c5e375d16109fd7c08d432ea767cea8770f54a422340ac784ebe76d8e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 12ef739c5e375d16109fd7c08d432ea767cea8770f54a422340ac784ebe76d8e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 15bf29170816b2291b2ebbc05c99ad93645432b19a37a5f3bcf1c574cec116e3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 15bf29170816b2291b2ebbc05c99ad93645432b19a37a5f3bcf1c574cec116e3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 15ec28cf4c7db399ead5d576b75a25c17f26cc791b0532ff8be9d160fc77ce48 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 15ec28cf4c7db399ead5d576b75a25c17f26cc791b0532ff8be9d160fc77ce48 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 17d6872e3b69fe1606990d870020be1da6ef25a568e28c92e300ad04fbabd87b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 17d6872e3b69fe1606990d870020be1da6ef25a568e28c92e300ad04fbabd87b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 20cd332b080b8c3da9c359c9aa71ad2e239f8e10575538423c6f0769c2c518f9 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 20cd332b080b8c3da9c359c9aa71ad2e239f8e10575538423c6f0769c2c518f9 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 22fc7eb36c260124fc54587a99363cddf9c9a18786f2c676a2293a74680905b6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 22fc7eb36c260124fc54587a99363cddf9c9a18786f2c676a2293a74680905b6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 27e0a504f6a21e1863341cd48fac5b6a52f129395fbd1a5a3e4c4a58b6950f63 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 27e0a504f6a21e1863341cd48fac5b6a52f129395fbd1a5a3e4c4a58b6950f63 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 31df3d79fdeed30469843ca69345a1732bf4342a8bcb68f17baf03f8361fb3b6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 31df3d79fdeed30469843ca69345a1732bf4342a8bcb68f17baf03f8361fb3b6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 31f9e77a01855aa86e1150fe7796a4b150d35122be1d25921856b9b7860c13f3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 31f9e77a01855aa86e1150fe7796a4b150d35122be1d25921856b9b7860c13f3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 32e9e9af776422d2122c7f751281c0820b21903486b673516f1af9f8aa8bc051 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 32e9e9af776422d2122c7f751281c0820b21903486b673516f1af9f8aa8bc051 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 33a8eae22d209780e6b43cab4c6874864da6c4e13cb9ea46eb6c4e3f12560123 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 33a8eae22d209780e6b43cab4c6874864da6c4e13cb9ea46eb6c4e3f12560123 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 34d0c2ead25c8b2cb0f253bc309fe89b93c7deb89980f26da056677053fa87e6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 34d0c2ead25c8b2cb0f253bc309fe89b93c7deb89980f26da056677053fa87e6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 37d45e49a0265ba55373f754d83025c5056ebb6bf3d6d65f0f096d329cc9b863 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 37d45e49a0265ba55373f754d83025c5056ebb6bf3d6d65f0f096d329cc9b863 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 40bee4203e6620bb75e8ae51730873431da901192d1de1e6bf643dcf17d9753e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 40bee4203e6620bb75e8ae51730873431da901192d1de1e6bf643dcf17d9753e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 41ffadd59bfbfd1579d9bbe503db7fde5bccc4159e3a30f6ed568e712ed25ca2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 41ffadd59bfbfd1579d9bbe503db7fde5bccc4159e3a30f6ed568e712ed25ca2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 52daf09801c7d6422fa6c3d6dc6c350ef959a35083da9a7159b26e39470c4dd8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 52daf09801c7d6422fa6c3d6dc6c350ef959a35083da9a7159b26e39470c4dd8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 60acdd3279ac1b4e97a66dd7668e355030dd606be58061a83bb9a5df78b05fed 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 60acdd3279ac1b4e97a66dd7668e355030dd606be58061a83bb9a5df78b05fed 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 64b534fa14150a7a289eb712ce9fa4f742f702a475fbe2cd02ab9dc63ddabcc0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 64b534fa14150a7a289eb712ce9fa4f742f702a475fbe2cd02ab9dc63ddabcc0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 64c4e2109ef39f176d0208b7733120583b098e94a32999d411e0f20edbf58a9c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 64c4e2109ef39f176d0208b7733120583b098e94a32999d411e0f20edbf58a9c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 66f8386a98f52811ed9341c6eaeb16182fc64c1cc2ae765b954fb824ae177eae 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 66f8386a98f52811ed9341c6eaeb16182fc64c1cc2ae765b954fb824ae177eae 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 67b95a08b88786201f4b375cc2a713448566e969afff055dc8ff11e2b2d3a26b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 67b95a08b88786201f4b375cc2a713448566e969afff055dc8ff11e2b2d3a26b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 70ca945e2d003319ca701837d9f8b695e32bd433ef8ab73a0ac23efca148bbc3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 70ca945e2d003319ca701837d9f8b695e32bd433ef8ab73a0ac23efca148bbc3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 70d65a980afbaef58f1d52a46ed3834e6494c9c2d5075e9dcc1aa4f63fa4f44d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 70d65a980afbaef58f1d52a46ed3834e6494c9c2d5075e9dcc1aa4f63fa4f44d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 74b51520fe577fce38f856aeea51b21fbc69ed3c46151288f43affd692512b7b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 74b51520fe577fce38f856aeea51b21fbc69ed3c46151288f43affd692512b7b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 80bb393619ba2f200819228b79d0f4094493afa261ca25d87cb298e491435181 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 80bb393619ba2f200819228b79d0f4094493afa261ca25d87cb298e491435181 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 83f963f5a074d63e87197089b0c63fe49c6f014af96799f9963e7b1f69bf32d4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 83f963f5a074d63e87197089b0c63fe49c6f014af96799f9963e7b1f69bf32d4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 87b3cd3f895970216bf5ece055b2e63b41976886aef4f7b86d78a531ccf5d3f1 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 87b3cd3f895970216bf5ece055b2e63b41976886aef4f7b86d78a531ccf5d3f1 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 90e6f831fd22e83f0e168ee34a48394d7ac547a85631c47bc861cea5feb0f71b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 90e6f831fd22e83f0e168ee34a48394d7ac547a85631c47bc861cea5feb0f71b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 90f6ab6efe945877dd7d11006dd5f406754c83ce29ae59b50c6237eff619cffe 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 90f6ab6efe945877dd7d11006dd5f406754c83ce29ae59b50c6237eff619cffe 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 91a3a35b5a84cc48ee42010c74663687d24b02a11b124188dcd933943a53aa4b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 91a3a35b5a84cc48ee42010c74663687d24b02a11b124188dcd933943a53aa4b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 91b364231ceca0b07da6889f28c2e48dcc367d3515fa4bb842a4c09487d9564b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 91b364231ceca0b07da6889f28c2e48dcc367d3515fa4bb842a4c09487d9564b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 96bc60f916c8d34349e98c16bd6fbb0afba65a7b6f3fe6d193b48510f7a300c4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 96bc60f916c8d34349e98c16bd6fbb0afba65a7b6f3fe6d193b48510f7a300c4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 96e21b187b400093db330a60b67b3f537ba989a11392d7f007cc9153aa7beaca 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 96e21b187b400093db330a60b67b3f537ba989a11392d7f007cc9153aa7beaca 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 97a8522ee895f64d3d89a8623440f0549a56b85a65e6ea9a751d6a14bfa34717 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 97a8522ee895f64d3d89a8623440f0549a56b85a65e6ea9a751d6a14bfa34717 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 252d9ba3057a08bea018606320b731a437567473987b012dfb394861b1f7a7d7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 252d9ba3057a08bea018606320b731a437567473987b012dfb394861b1f7a7d7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 276d8bcfd410a23b3f8524cdb61ef039093fda3552346b1e89ee123e1d81ba04 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 276d8bcfd410a23b3f8524cdb61ef039093fda3552346b1e89ee123e1d81ba04 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 277e90815461fd1de5d156b66a2b92a524f405f7d5b475cd1ac01c4c7f09db13 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 277e90815461fd1de5d156b66a2b92a524f405f7d5b475cd1ac01c4c7f09db13 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 292aabcd0a19ccf59564a6b457459b91bd32bb25ee5f8c8aefba741bad086bb3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 292aabcd0a19ccf59564a6b457459b91bd32bb25ee5f8c8aefba741bad086bb3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 336f1f7afbd4f7c51fdf9899d14e910a0cc60114ea9757bccaeea1ddf0e431d2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 336f1f7afbd4f7c51fdf9899d14e910a0cc60114ea9757bccaeea1ddf0e431d2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 380ed4ffdf674c9e85e41e67c12b74d877f79d6ade3e5a1187291521f41407b6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 380ed4ffdf674c9e85e41e67c12b74d877f79d6ade3e5a1187291521f41407b6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 405bdc5763491691d96113f7fbf1ca3d7a066c33bbcfa96cc7993e5df9647854 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 405bdc5763491691d96113f7fbf1ca3d7a066c33bbcfa96cc7993e5df9647854 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 473a846401cb39e22d2c727e7f0baa49db56d7d8156aef92415a42f3b7ba6f53 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 473a846401cb39e22d2c727e7f0baa49db56d7d8156aef92415a42f3b7ba6f53 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 501e5d62b6ed346e42a3f6697df45838426703dc474375cdfb235ef55d41a139 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 501e5d62b6ed346e42a3f6697df45838426703dc474375cdfb235ef55d41a139 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 554c0b7a2f0c85d33a9345d3ca4156f3756d922404809645c9afb5b445ad4cec 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 554c0b7a2f0c85d33a9345d3ca4156f3756d922404809645c9afb5b445ad4cec 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 611a650af585fb8d908449e42f2162ac78823b525acb424a32e47dfc0eb482c0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 611a650af585fb8d908449e42f2162ac78823b525acb424a32e47dfc0eb482c0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 674e245f0ecd0632032355ec4eb57bfb95dd7695b93d0ec8771eb29471d71cc4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 674e245f0ecd0632032355ec4eb57bfb95dd7695b93d0ec8771eb29471d71cc4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 692e274533bb0b282a657313d6309e4a16efc43914e65a38405f7d9d24b13142 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 692e274533bb0b282a657313d6309e4a16efc43914e65a38405f7d9d24b13142 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 711c09a862a537a6d197ca348e0cdc6a29e82ec763749b0c5ed023fae4d6a16c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 711c09a862a537a6d197ca348e0cdc6a29e82ec763749b0c5ed023fae4d6a16c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 785ac0e27c1694e26c0dd671121c210a5a092dc6fe95dba51b6e88c844ae2435 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 785ac0e27c1694e26c0dd671121c210a5a092dc6fe95dba51b6e88c844ae2435 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 799d4234701ab4317f5b9bc33cb9a4317e77c4fa9624c935bcf70f309c6183d2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 799d4234701ab4317f5b9bc33cb9a4317e77c4fa9624c935bcf70f309c6183d2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 831ed66e5a11fb075347bfd6192b929d4bf1293e33d53d6927b0d5701cf5bd78 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 831ed66e5a11fb075347bfd6192b929d4bf1293e33d53d6927b0d5701cf5bd78 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 835bb7156462fa857c0168c6706ca262d43b3adf1793770de92931a79e9a94d3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 835bb7156462fa857c0168c6706ca262d43b3adf1793770de92931a79e9a94d3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1471b22995be1ad439c56a02e29c2e0c95bc65670cb56be844f7a5d50ac86be5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1471b22995be1ad439c56a02e29c2e0c95bc65670cb56be844f7a5d50ac86be5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 1541bf07164e94ff542f93c44a69c0047dc0fbc1b98f06b4b89ebb3d54d63920 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 1541bf07164e94ff542f93c44a69c0047dc0fbc1b98f06b4b89ebb3d54d63920 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3917bad3e3f07779bbf5f64591ab2d91ff04135d45ed7a9729866dad50346d78 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3917bad3e3f07779bbf5f64591ab2d91ff04135d45ed7a9729866dad50346d78 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 3996e0b7790fdc669d9b7cd7d9ba7438f276fec7d4b7afa6cc4f223754f458dd 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 3996e0b7790fdc669d9b7cd7d9ba7438f276fec7d4b7afa6cc4f223754f458dd 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 4470dd44c5ac652ece3777e494f1fa591f04baed30deb8231bb1887b77676fee 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 4470dd44c5ac652ece3777e494f1fa591f04baed30deb8231bb1887b77676fee 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 5452c18f6ad7985f596aaabda00f913c40d7c29703391a9247cb522e2a2b9333 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 5452c18f6ad7985f596aaabda00f913c40d7c29703391a9247cb522e2a2b9333 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 8952f64b0a2be15d7dda1b905ffcf9c40340083a04669a2484ff5a017dbf2306 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 8952f64b0a2be15d7dda1b905ffcf9c40340083a04669a2484ff5a017dbf2306 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9688db982f0eddb7132783c9666cf8f27d09bac4ae371d3119d3d63ad5aea593 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9688db982f0eddb7132783c9666cf8f27d09bac4ae371d3119d3d63ad5aea593 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 11804b485aa1a90d9d8a5a0cb37660c1de9cfeaa1928001da71a69eb7bafa449 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 11804b485aa1a90d9d8a5a0cb37660c1de9cfeaa1928001da71a69eb7bafa449 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 23619fa0dc42fb6dd8463181bb714a6f22d3fa5b913c65699bd38ceced9f0775 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 23619fa0dc42fb6dd8463181bb714a6f22d3fa5b913c65699bd38ceced9f0775 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 47497b7ba176be5b8b06a46261651392d921c88cd1b02a5500613fdaef639180 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 47497b7ba176be5b8b06a46261651392d921c88cd1b02a5500613fdaef639180 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 55682aec9f8792bfc270c622eb3eb5ce5b7e774600c30bc974ddad8cb3428273 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 55682aec9f8792bfc270c622eb3eb5ce5b7e774600c30bc974ddad8cb3428273 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 55780a3196c5e1fb5c88f95429262e5f5cf53fe53ce4a0e58f0a5f3ad5bcf9b4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 55780a3196c5e1fb5c88f95429262e5f5cf53fe53ce4a0e58f0a5f3ad5bcf9b4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 83085b2bb54f1b7202f5e132550cbef8b37f7fb563a0609142615bfc48ae9b75 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 83085b2bb54f1b7202f5e132550cbef8b37f7fb563a0609142615bfc48ae9b75 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 83541ecbf21d8b81b05c08bb8dc698a159b690fec1dfbbed8b9a00ebd0eb4df4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 83541ecbf21d8b81b05c08bb8dc698a159b690fec1dfbbed8b9a00ebd0eb4df4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 85382a979f38ca41db9fad64565b90e162841f1d70c8cf2f9b8d7abed0a57d78 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 85382a979f38ca41db9fad64565b90e162841f1d70c8cf2f9b8d7abed0a57d78 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 143804cb1654e6033f6adf37fe16cc4523d5f2b8f569274ce639f94e965c8d9e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 143804cb1654e6033f6adf37fe16cc4523d5f2b8f569274ce639f94e965c8d9e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 716267b05019b77d31d0b443e8c6889f6132f292d3357dd56d8d145d7043555a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 716267b05019b77d31d0b443e8c6889f6132f292d3357dd56d8d145d7043555a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 913649bc088defcdf6ffb18e7b102aa0f5d88e585af32b2ba2f887d322541675 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 913649bc088defcdf6ffb18e7b102aa0f5d88e585af32b2ba2f887d322541675 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 9689196e9ce2004bfc79d4b87399e4dd1d6be68b757126dc4d2cdc5777145c0e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 9689196e9ce2004bfc79d4b87399e4dd1d6be68b757126dc4d2cdc5777145c0e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 16023450da7a24aaffaf5e8cf0780a87da3bc658b8742b2877019a5b9219e669 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 16023450da7a24aaffaf5e8cf0780a87da3bc658b8742b2877019a5b9219e669 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 69645316f3d32bd17c6f6fad22071bba290681052e7272460a6d7dab3b2c1f8f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 69645316f3d32bd17c6f6fad22071bba290681052e7272460a6d7dab3b2c1f8f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 547387898c8d56bcf18ca5918213b69e46203ec552e8040b3707c604e93a527c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 547387898c8d56bcf18ca5918213b69e46203ec552e8040b3707c604e93a527c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 589106841195f451927ec933dd6ab7b4b67856938d1cd739fd71ec8ad7fa03ec 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 589106841195f451927ec933dd6ab7b4b67856938d1cd739fd71ec8ad7fa03ec 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 47926692536863f56179b4d511cf52aebf02f4e557ed6f13aff6a561eaa95c8b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 47926692536863f56179b4d511cf52aebf02f4e557ed6f13aff6a561eaa95c8b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a0a86e28890203398f0f34011df2aa3dd4147db7b965163c1b7ea242b794b438 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a0a86e28890203398f0f34011df2aa3dd4147db7b965163c1b7ea242b794b438 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 4.300000000000001, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 3.6, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a0ffc91932f2cab05ff12933cd7a59182b3034a13507569e8cfd5899a0bca942 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a0ffc91932f2cab05ff12933cd7a59182b3034a13507569e8cfd5899a0bca942 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a2e74ce9206f5f54001f2e8e214fc66e8b733de2d9c3e953e2258cadfd1395dd 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a2e74ce9206f5f54001f2e8e214fc66e8b733de2d9c3e953e2258cadfd1395dd 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a3f24050cbae1c19af38b9fd5106755a6631e5fe551e16498854be6bd2481b3f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a3f24050cbae1c19af38b9fd5106755a6631e5fe551e16498854be6bd2481b3f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a4c72048fa9045bf1f0b1af579b1d5f1530295c546ef3ba594f46681ed1b3271 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a4c72048fa9045bf1f0b1af579b1d5f1530295c546ef3ba594f46681ed1b3271 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a4ebe0fd01d74088b2760e073d278d5e569777448a7b1e6bc003428b65bdfc0d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a4ebe0fd01d74088b2760e073d278d5e569777448a7b1e6bc003428b65bdfc0d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a7b49d03c15985c710085bd0f3011e5c704cd2edf3bb0ed694363672b0b893d7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a7b49d03c15985c710085bd0f3011e5c704cd2edf3bb0ed694363672b0b893d7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a8c23b3e6d13c84397b625b0ddb8346c28e9b9241a28f6766b00a6a2829f91a2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a8c23b3e6d13c84397b625b0ddb8346c28e9b9241a28f6766b00a6a2829f91a2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 a7062663cc89fb6e59df288d1993e644ff45f6dd78ed94d3cc7b8898a1c3c149 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 a7062663cc89fb6e59df288d1993e644ff45f6dd78ed94d3cc7b8898a1c3c149 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ac22151a42c410e7be1a9fb35254d1a4a3095c16718924ca2644cb0053e9e42f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ac22151a42c410e7be1a9fb35254d1a4a3095c16718924ca2644cb0053e9e42f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ac32052c52c6075920e85901792e9523a4c33f32baf22cb5195aaf8bea019eff 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ac32052c52c6075920e85901792e9523a4c33f32baf22cb5195aaf8bea019eff 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ad4ce5c65aeb1d79c56fb9cfd29655df60ebde28628feb9d7f49a57e526c40bc 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ad4ce5c65aeb1d79c56fb9cfd29655df60ebde28628feb9d7f49a57e526c40bc 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 aec626662dddcc61497c3be7627fbd5cc553b0e62b533f7cbadb84c57956dff6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 aec626662dddcc61497c3be7627fbd5cc553b0e62b533f7cbadb84c57956dff6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b016764372ec7ffb7029a59fae1b0763013175b9333732d06eaa5c4e0fb1e324 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b016764372ec7ffb7029a59fae1b0763013175b9333732d06eaa5c4e0fb1e324 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b0b9d0647230f9747ec657da92cb4b59045270e99e6b9ffb69c91ba1366439e8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b0b9d0647230f9747ec657da92cb4b59045270e99e6b9ffb69c91ba1366439e8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b0fb8a3061529f3cc9318fe362dce93b24362545e55533f34b71059d91ce9e76 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b0fb8a3061529f3cc9318fe362dce93b24362545e55533f34b71059d91ce9e76 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b5c24a366c60c322eef064b00428c033391547d949d423b753a4e6637c090117 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b5c24a366c60c322eef064b00428c033391547d949d423b753a4e6637c090117 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b5fca4abfc28a45c02a2462873d64bdc2f1e343499ec9fa035981dfa41d377e4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b5fca4abfc28a45c02a2462873d64bdc2f1e343499ec9fa035981dfa41d377e4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b7e384e4f0947d28bf82dbef27866c6357e83fa8a8f3ad959572a22c5b18aa99 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b7e384e4f0947d28bf82dbef27866c6357e83fa8a8f3ad959572a22c5b18aa99 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b8a05ca7b11762af2d410333ef0d7a49bada1d67953b8757301ed1183b246e8a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b8a05ca7b11762af2d410333ef0d7a49bada1d67953b8757301ed1183b246e8a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b14de8c5da8b14a243d4acd7c5b1121e935f8be43dfd1e76894af994e232129b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b14de8c5da8b14a243d4acd7c5b1121e935f8be43dfd1e76894af994e232129b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b49ba54f670ecd3e41e653b2c723473547f7988bd853f0830e2a80428fba7a3b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b49ba54f670ecd3e41e653b2c723473547f7988bd853f0830e2a80428fba7a3b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b303cfa011b21a0b00a836c10b3835a9b9d24050edecead109404289ac50ebb8 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b303cfa011b21a0b00a836c10b3835a9b9d24050edecead109404289ac50ebb8 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b4778e8ef7fdd40971e805182f86b710b3e16d1dc14199e8a2f43836743bbb58 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b4778e8ef7fdd40971e805182f86b710b3e16d1dc14199e8a2f43836743bbb58 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b4786d126fc7df5b7b93afaac48a4c1c123a4c06c3ead5c43d1283cac0b99adf 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b4786d126fc7df5b7b93afaac48a4c1c123a4c06c3ead5c43d1283cac0b99adf 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 b27010286e4fc0b69b34fb02e72b991d173569ee3f40f3ef638efef70806b48c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 b27010286e4fc0b69b34fb02e72b991d173569ee3f40f3ef638efef70806b48c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bb0844335135ed5160d22b3ef66262712ad0ea4005d8c8cfdad41961a35b35cf 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bb0844335135ed5160d22b3ef66262712ad0ea4005d8c8cfdad41961a35b35cf 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bb38c76547eac566a25b5a35c72fedad2e3976c56ebdd3c4290d13ddeadfb72b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bb38c76547eac566a25b5a35c72fedad2e3976c56ebdd3c4290d13ddeadfb72b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bc00df95e05da2f9ac50c910be5ff7495b9dcfa57809485c42ee072a09cca64c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bc00df95e05da2f9ac50c910be5ff7495b9dcfa57809485c42ee072a09cca64c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bcdafa2baa64a1b7fec0df904b061f5013db718c273b68fb15e5202730baf2f0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bcdafa2baa64a1b7fec0df904b061f5013db718c273b68fb15e5202730baf2f0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bdeca9defede732388cba0deb4f24882fe8cf6747f126b35c2eb8c2e2a2c4daf 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bdeca9defede732388cba0deb4f24882fe8cf6747f126b35c2eb8c2e2a2c4daf 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bdf8b674995e674e859bce6e90ec1cfc3062c31ce3307241efd9c0fbb702f47d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bdf8b674995e674e859bce6e90ec1cfc3062c31ce3307241efd9c0fbb702f47d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 be222a87960e8e4ce7d8ae6deab10899cbcd6d7860e5ed724cb470fe4fcbad61 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 be222a87960e8e4ce7d8ae6deab10899cbcd6d7860e5ed724cb470fe4fcbad61 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bf61c2b21c5d7e61d63ae257f6a19d7176238417dbffb1bdaa0736cd69879bee 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bf61c2b21c5d7e61d63ae257f6a19d7176238417dbffb1bdaa0736cd69879bee 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bfb58d8908edefa426cf168e7d8296d338a29d95b170b51fd50fac1cb5bdda37 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bfb58d8908edefa426cf168e7d8296d338a29d95b170b51fd50fac1cb5bdda37 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bfbf1d90ebc0f656d27ff8e1f3849c47252832b6fec764b99903e0b7404d5e22 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bfbf1d90ebc0f656d27ff8e1f3849c47252832b6fec764b99903e0b7404d5e22 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 bfe4b6e407918f9b1950dec866e81be3b530f93808bb868b08fd5a5205209134 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 bfe4b6e407918f9b1950dec866e81be3b530f93808bb868b08fd5a5205209134 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c03098d654781c88afaf223ab229aa00a82702a911a5de31ca050a3212b55f8a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c03098d654781c88afaf223ab229aa00a82702a911a5de31ca050a3212b55f8a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c2e1fdfc6624f03e8c2192b2f6a5c0c9aff1db8aa60843d711a806db819bc96f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c2e1fdfc6624f03e8c2192b2f6a5c0c9aff1db8aa60843d711a806db819bc96f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c3eadb5367c442761bbf36eb6ef4560b1f141d636cebddb4b70d36491841d87b 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c3eadb5367c442761bbf36eb6ef4560b1f141d636cebddb4b70d36491841d87b 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c4fe503862cb3a3af1be1aff5c8337ba51674f13237732fdbd8d7a72ae676776 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c4fe503862cb3a3af1be1aff5c8337ba51674f13237732fdbd8d7a72ae676776 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c5d2fe429f79407321c7c36578a26d25fbfe426511c34a602916cbb6f07377a6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c5d2fe429f79407321c7c36578a26d25fbfe426511c34a602916cbb6f07377a6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c8b950f2d8479f241f3b0feb1b5b9f0bfb5e0f33f3422a1fa8266d4b4f5df3fd 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c8b950f2d8479f241f3b0feb1b5b9f0bfb5e0f33f3422a1fa8266d4b4f5df3fd 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c9f748a8857a877d0e81f623c9bf80c0a4f0a3d04c8daa0d6b51d5ed558fa404 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c9f748a8857a877d0e81f623c9bf80c0a4f0a3d04c8daa0d6b51d5ed558fa404 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c76b49bcd90435ac8dad3098eee418260d4d76fad384f4477defea05c85620a4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c76b49bcd90435ac8dad3098eee418260d4d76fad384f4477defea05c85620a4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c802c2c7bb54dcfd0bac8a00d6251469b1485f588ca657dcca3607b398d2eeaf 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c802c2c7bb54dcfd0bac8a00d6251469b1485f588ca657dcca3607b398d2eeaf 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c200118d41b6e2b108e4cc3a7d84fd68f403a0862906521acf2128eae9e9b936 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c200118d41b6e2b108e4cc3a7d84fd68f403a0862906521acf2128eae9e9b936 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 c78469843116f97718deb396453fb6c9ed1d0897c79ed9d313ef75fbf2c72083 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 c78469843116f97718deb396453fb6c9ed1d0897c79ed9d313ef75fbf2c72083 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ca8e8fea1f79b01d4a012f7ede850100ac01e156073350f420b3db09deda3307 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ca8e8fea1f79b01d4a012f7ede850100ac01e156073350f420b3db09deda3307 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cac903472a178c23771a1f252416eb37bbfe75c863d0feb67a1a578dd5ef8ce7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cac903472a178c23771a1f252416eb37bbfe75c863d0feb67a1a578dd5ef8ce7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cae5171641fbabd2bd6b8bd42e49ae84eca12870ffec5a244cb82d8ccdd97740 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cae5171641fbabd2bd6b8bd42e49ae84eca12870ffec5a244cb82d8ccdd97740 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cb1c8d321bfbbc6e796107a9f8260ac3e305b9495a7259f99ffa14ef26c9766a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cb1c8d321bfbbc6e796107a9f8260ac3e305b9495a7259f99ffa14ef26c9766a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cb24d63f2735e8a513a3ee3cbf12a8d3e72cd375a065c9d2e71bef429cf5d37a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cb24d63f2735e8a513a3ee3cbf12a8d3e72cd375a065c9d2e71bef429cf5d37a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cc380993e36cf81d23100be12ab25bb0d53c1c075bcd7cdcbe9742c47f6cb9a0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cc380993e36cf81d23100be12ab25bb0d53c1c075bcd7cdcbe9742c47f6cb9a0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 cde848de9eb1cbd1975007411dbe7161445422481f4c0e948fd07d03d0fc7770 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 cde848de9eb1cbd1975007411dbe7161445422481f4c0e948fd07d03d0fc7770 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d0793e1388af50f3a48477e5d34fe1b782eb441ec909697ce3e0f137471ed13a 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d0793e1388af50f3a48477e5d34fe1b782eb441ec909697ce3e0f137471ed13a 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d4e413efcad90a91c6e0138a81396b9496ffece418528ddedf7864345455693e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d4e413efcad90a91c6e0138a81396b9496ffece418528ddedf7864345455693e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d5b405ab7f7dc88443112a5e5185c4f3c349cfa9a51c0cea22d8aa05da3c7a79 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d5b405ab7f7dc88443112a5e5185c4f3c349cfa9a51c0cea22d8aa05da3c7a79 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d6fd273bfab303eae51f8ae664f212f8f5e8d41b5b4d9b568d8c40db09cf7935 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d6fd273bfab303eae51f8ae664f212f8f5e8d41b5b4d9b568d8c40db09cf7935 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d7e686d536977845dad82a420a3d2fe6fe0157320848ecaf417dc9cc9feb5540 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d7e686d536977845dad82a420a3d2fe6fe0157320848ecaf417dc9cc9feb5540 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d37df3d1fdef77c545ceb53b9ddbe04847a90cc7651eaf6114a0958505fc3d6f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d37df3d1fdef77c545ceb53b9ddbe04847a90cc7651eaf6114a0958505fc3d6f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d472f29aae8c17c27aac0efeb07dec53002c788827890374c3c201330bff498e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d472f29aae8c17c27aac0efeb07dec53002c788827890374c3c201330bff498e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d2329da7172e326fb9e1f03806ad3e87ccf5588cd0bfb904c960d30f474d99c3 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d2329da7172e326fb9e1f03806ad3e87ccf5588cd0bfb904c960d30f474d99c3 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d53921bd15d1246d98a67d58ffdbe36ac58de5bf1b043cebb1adbc54d1ae04c6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d53921bd15d1246d98a67d58ffdbe36ac58de5bf1b043cebb1adbc54d1ae04c6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d4691537e3efea802549eb81cf680b82a808183a64ba0aef9a1d784c0f80e499 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d4691537e3efea802549eb81cf680b82a808183a64ba0aef9a1d784c0f80e499 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 d6436979d2de231ce3e1c75c1e7b889b5e6d7f526e3255287bd7d5ad19fbaaa5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 d6436979d2de231ce3e1c75c1e7b889b5e6d7f526e3255287bd7d5ad19fbaaa5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 dad812f482d7eeee83cf3f0210a6f19a3394e2c13e8b893d448457c649d86487 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 dad812f482d7eeee83cf3f0210a6f19a3394e2c13e8b893d448457c649d86487 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 db73feb64c21a2501bbc5229eb063182c8d172cea6ae1d3e977c7e385b84d28f 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 db73feb64c21a2501bbc5229eb063182c8d172cea6ae1d3e977c7e385b84d28f 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 db2262a6753692c795f5a873726345b5086b7cc518b47ba579ab1faaf80b3234 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 db2262a6753692c795f5a873726345b5086b7cc518b47ba579ab1faaf80b3234 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 dbcada6ae5060073d41aec8382079aedf0590eba3e5ece24833826f34c41ada7 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 dbcada6ae5060073d41aec8382079aedf0590eba3e5ece24833826f34c41ada7 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 dc6413760360340e8e39ab5202879a77704f106d79e55c0ae303d0442ca8e9b2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 dc6413760360340e8e39ab5202879a77704f106d79e55c0ae303d0442ca8e9b2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 dcfe53e754aa5105322448e6280c72051ef00727d1e014152b31907a676464c0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 dcfe53e754aa5105322448e6280c72051ef00727d1e014152b31907a676464c0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 de787bc83aa453baba758aeea064960646eaa8cc0746b95f1f13f3082aede255 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 de787bc83aa453baba758aeea064960646eaa8cc0746b95f1f13f3082aede255 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 df62786ab78d42f1e7061039b0ca0c20a910ad4e07305932370204a40f635bc5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 df62786ab78d42f1e7061039b0ca0c20a910ad4e07305932370204a40f635bc5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e056f6f5f2ddfc687ab1cd954329e78ba52704d3a33a809cd1f2ec3b7ae69fb4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e056f6f5f2ddfc687ab1cd954329e78ba52704d3a33a809cd1f2ec3b7ae69fb4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e062a1905b0a5ea245713b48d5ca2c917f05a2846beff0567602920cbb12dc53 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e062a1905b0a5ea245713b48d5ca2c917f05a2846beff0567602920cbb12dc53 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e0628f4402d6679324e520eaa8b41f2d2a773731577c588503da22648b92e155 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e0628f4402d6679324e520eaa8b41f2d2a773731577c588503da22648b92e155 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 4.300000000000001, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 3.6, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e3dd170b5ce6e0e078b44099ba286c14f1765bb2d3e9b3b3bbaf7754a54c8d5e 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e3dd170b5ce6e0e078b44099ba286c14f1765bb2d3e9b3b3bbaf7754a54c8d5e 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e4b6a62901747d714daf68ed2d0b42fa1cf7da7064738cd1dadc5bc9ffa4b139 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e4b6a62901747d714daf68ed2d0b42fa1cf7da7064738cd1dadc5bc9ffa4b139 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e7d52c3a3d21a2eb654e781fb124710b356bec5f53c422cdbce3a8ce914700ae 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e7d52c3a3d21a2eb654e781fb124710b356bec5f53c422cdbce3a8ce914700ae 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e67d5f7397d046e8c15d0a449a5b3cc1b7d248203853056c0de4c9337419c8b2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e67d5f7397d046e8c15d0a449a5b3cc1b7d248203853056c0de4c9337419c8b2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e206d98bc675e5d9691e42d0c57b0ed285abab3449f0dfae0522a90bc084a3a5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e206d98bc675e5d9691e42d0c57b0ed285abab3449f0dfae0522a90bc084a3a5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 3, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 2, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e384abc8117d743f9942e328eba01cef3495a11ae7fcd0a3495181b4f9ae8647 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e384abc8117d743f9942e328eba01cef3495a11ae7fcd0a3495181b4f9ae8647 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e683a14dac0ccfe7e64ffb08ebc850b13e28cf77af84d3b1cbf301cca36762ea 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e683a14dac0ccfe7e64ffb08ebc850b13e28cf77af84d3b1cbf301cca36762ea 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e6372c9bbc2bd3fa18ea8059cdd5e38a3e1bf04a435960b61cd2debcb3c4e5b5 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e6372c9bbc2bd3fa18ea8059cdd5e38a3e1bf04a435960b61cd2debcb3c4e5b5 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e8247fdf399bb62d21aa16c0717b338fdc1d790ae5b192da4469b8f577f2a0a4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e8247fdf399bb62d21aa16c0717b338fdc1d790ae5b192da4469b8f577f2a0a4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 e8701f38e5307773b2f65aafe5bff1ffc1d6c5c7d5547e1430bc7cb4a9ea48f2 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 e8701f38e5307773b2f65aafe5bff1ffc1d6c5c7d5547e1430bc7cb4a9ea48f2 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ea7b58240939d61690db8095ad0cbf44fd8218ae0199ad0de824554ef984b018 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ea7b58240939d61690db8095ad0cbf44fd8218ae0199ad0de824554ef984b018 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1500000000000004, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 eafb2cdf2e741433496d7bc57499b58e276031086f65109a428abeabb3d70d61 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 eafb2cdf2e741433496d7bc57499b58e276031086f65109a428abeabb3d70d61 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 eb09c6e49fd06a6f6e0fdfa1e4c68a102ce510ca00f8f3f99eada885071e5902 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 eb09c6e49fd06a6f6e0fdfa1e4c68a102ce510ca00f8f3f99eada885071e5902 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ebfc07e95a832a406f56299775d2c125d35cc72368bc3a3a8b6beb174fdba105 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ebfc07e95a832a406f56299775d2c125d35cc72368bc3a3a8b6beb174fdba105 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 ed533bec40c6a9d8a841dcd8efc8ad5d9517b3b99a6092cdcc979e13f24916e6 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 ed533bec40c6a9d8a841dcd8efc8ad5d9517b3b99a6092cdcc979e13f24916e6 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 edb33b2bd6df2f1fb127dddaac3e705689027ffb8a0d51504842ce81ec8c5213 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 edb33b2bd6df2f1fb127dddaac3e705689027ffb8a0d51504842ce81ec8c5213 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f1cc74d9c8d9422d06b02c1e6d3609f2bfc8a3d2676fd24d1a86d1323c51ddc1 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f1cc74d9c8d9422d06b02c1e6d3609f2bfc8a3d2676fd24d1a86d1323c51ddc1 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f1fe14e42bff9959d1632dee6c052a022c1a7dcd528e9b82fccf5f86a550f68c 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f1fe14e42bff9959d1632dee6c052a022c1a7dcd528e9b82fccf5f86a550f68c 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f6f1472f4bd652ec69b8dbda9ad90c216186713d487e617beed7b5e914826888 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f6f1472f4bd652ec69b8dbda9ad90c216186713d487e617beed7b5e914826888 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f9a91bb4d9f7761c00ecedc5eb34d9aad67a19f73cd2a7d71aa9e4107a63d80d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f9a91bb4d9f7761c00ecedc5eb34d9aad67a19f73cd2a7d71aa9e4107a63d80d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 12, + }, + { + "amount": 21, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 21, + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f9b259c5f4d8d1bac8ab723949dc46e04f01e5f03bb3f1cdcf7d09802e1c9418 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "sum", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f9b259c5f4d8d1bac8ab723949dc46e04f01e5f03bb3f1cdcf7d09802e1c9418 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 36, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 43, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 3.6, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 4.300000000000001, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f9ea15cf2360747c4e7a982594fdd0af4875c32952bf2ca4e0ceca7835161f66 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f9ea15cf2360747c4e7a982594fdd0af4875c32952bf2ca4e0ceca7835161f66 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f29f7e453c738e674e6b31fa8081ca47b0a2702daec98258c9e81d1ad2c4cafe 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f29f7e453c738e674e6b31fa8081ca47b0a2702daec98258c9e81d1ad2c4cafe 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f36ae3c31a0eeeeb5deb5ddaea563eebcd7caf3c8ec2423f6a280f6c9c0637af 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f36ae3c31a0eeeeb5deb5ddaea563eebcd7caf3c8ec2423f6a280f6c9c0637af 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 11, + }, + { + "amount": 12, + }, + { + "amount": 13, + }, + { + "amount": 21, + }, + { + "amount": 22, + }, + { + "amount": 33, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 11, + "price": 1.1, + }, + { + "amount": 12, + "price": 1.2, + }, + { + "amount": 13, + "price": 1.3, + }, + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 33, + "price": 3.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f59fc7f54b580b1508873f78a4d5eea68ebcc64cb4bab6d758e12b3a971cdc60 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "max", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f59fc7f54b580b1508873f78a4d5eea68ebcc64cb4bab6d758e12b3a971cdc60 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f77d9025f1b09570e7bc1c69cb23242b41ce546eec9b98a58e253ce4e3778e20 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "min", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f77d9025f1b09570e7bc1c69cb23242b41ce546eec9b98a58e253ce4e3778e20 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f835c8a7ffddd62da6f23075d797894a31dd3f0802d5b8a95254ac3ee09bde7d 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f835c8a7ffddd62da6f23075d797894a31dd3f0802d5b8a95254ac3ee09bde7d 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-03T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-02T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-02T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-03T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-03T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-02T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-01-02T00:00:00", + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-03T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 f89136f3f0ab67271edbb19ce0ab65e73b35da558c28b23e3b8b0a97a45404e4 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 f89136f3f0ab67271edbb19ce0ab65e73b35da558c28b23e3b8b0a97a45404e4 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 1, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fa190993ea3bc8e844ad0874ecd0eeb074e1faee009525640944a924f2b66f20 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "median", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fa190993ea3bc8e844ad0874ecd0eeb074e1faee009525640944a924f2b66f20 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21.5, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fb45e747e95374c0677549cc3ab8a8895bd636eca76563a5b2ac78e66fa8ff41 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fb45e747e95374c0677549cc3ab8a8895bd636eca76563a5b2ac78e66fa8ff41 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fb10147120de8476c97f5221d3e963f41f2c1ba5d0209a5e071e90637cf91748 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "mean", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fb10147120de8476c97f5221d3e963f41f2c1ba5d0209a5e071e90637cf91748 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 21, + }, + { + "amount": 13, + }, + { + "amount": 12, + }, + { + "amount": 11, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fc87b009dd95a8f62185825e5b3475372d8c2b14c8cc7238b127dbc710698bc0 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "amount", + "type": "int", + }, + "xAxisGroupFunction": null, + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + { + "aggregateFunction": "count", + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fc87b009dd95a8f62185825e5b3475372d8c2b14c8cc7238b127dbc710698bc0 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 33, + }, + { + "amount": 22, + }, + { + "amount": 11, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 21, + }, + { + "amount": 12, + }, + ], + }, + { + "dimensions": [ + "amount", + "amount", + ], + "source": [ + { + "amount": 13, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 33, + "price": 3.3, + }, + { + "amount": 22, + "price": 2.2, + }, + { + "amount": 11, + "price": 1.1, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 21, + "price": 2.1, + }, + { + "amount": 12, + "price": 1.2, + }, + ], + }, + { + "dimensions": [ + "amount", + "price", + ], + "source": [ + { + "amount": 13, + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fc5264ec9d22ae310a53ab045eae12cbb0a61b6b8e7080238172c8315d0620ea 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "descending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": null, + }, + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": null, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fc5264ec9d22ae310a53ab045eae12cbb0a61b6b8e7080238172c8315d0620ea 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "type": "bar", + }, + { + "datasetIndex": 1, + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + ], + }, + "success": true, +} +`; + +exports[`.createVisualizationV2 fcb3143c827505713635369873a17116124bd685a81a38817de044eb36b37d42 1`] = ` +{ + "chartType": "groupedColumn", + "dataframeName": "df", + "xAxis": { + "name": "datetime", + "type": "datetime64", + }, + "xAxisGroupFunction": "month", + "xAxisName": null, + "xAxisSort": "ascending", + "yAxes": [ + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "amount", + "type": "int", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + { + "series": [ + { + "aggregateFunction": null, + "axisName": null, + "chartType": null, + "column": { + "name": "price", + "type": "float", + }, + "groupBy": { + "name": "fruit", + "type": "str", + }, + }, + ], + }, + ], +} +`; + +exports[`.createVisualizationV2 fcb3143c827505713635369873a17116124bd685a81a38817de044eb36b37d42 2`] = ` +{ + "data": { + "dataset": [ + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 11, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 22, + "datetime": "2021-02-01T00:00:00", + }, + { + "amount": 33, + "datetime": "2021-03-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 12, + "datetime": "2021-01-01T00:00:00", + }, + { + "amount": 21, + "datetime": "2021-02-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "amount", + ], + "source": [ + { + "amount": 13, + "datetime": "2021-01-01T00:00:00", + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.1, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.2, + }, + { + "datetime": "2021-03-01T00:00:00", + "price": 3.3, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.2, + }, + { + "datetime": "2021-02-01T00:00:00", + "price": 2.1, + }, + ], + }, + { + "dimensions": [ + "datetime", + "price", + ], + "source": [ + { + "datetime": "2021-01-01T00:00:00", + "price": 1.3, + }, + ], + }, + ], + "series": [ + { + "datasetIndex": 0, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 1, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 2, + "name": "pineapple", + "type": "bar", + }, + { + "datasetIndex": 3, + "name": "apple", + "type": "bar", + }, + { + "datasetIndex": 4, + "name": "banana", + "type": "bar", + }, + { + "datasetIndex": 5, + "name": "pineapple", + "type": "bar", + }, + ], + "tooltip": { + "trigger": "axis", + }, + "xAxis": [ + { + "axisPointer": { + "type": "shadow", + }, + "type": "category", + }, + ], + "yAxis": [ + { + "type": "value", + }, + { + "type": "value", + }, + ], + }, + "success": true, +} +`; diff --git a/apps/api/src/python/visualization-v2.test.ts b/apps/api/src/python/visualization-v2.test.ts index fa8f78c1..2891c4e0 100644 --- a/apps/api/src/python/visualization-v2.test.ts +++ b/apps/api/src/python/visualization-v2.test.ts @@ -1,5 +1,15 @@ +import crypto from 'crypto' import * as services from '@jupyterlab/services' -import { DataFrame, DataFrameColumn, Output } from '@briefer/types' +import { + AggregateFunction, + ChartType, + DataFrame, + DataFrameColumn, + Output, + SeriesV2, + TimeUnit, + YAxisV2, +} from '@briefer/types' import { createVisualizationV2 } from './visualizations-v2' import { JupyterManager } from '../jupyter/manager' import { getVar } from '../config' @@ -8,15 +18,10 @@ import { VisualizationV2BlockInput, VisualizationV2BlockOutputResult, } from '@briefer/editor' - -const manager = new JupyterManager( - 'http', - 'localhost', - 8888, - getVar('JUPYTER_TOKEN') -) +import { IJupyterManager } from '../jupyter' async function getPythonRunner( + manager: IJupyterManager, workspaceId: string, sessionId: string ): Promise<{ dispose: () => Promise; runPython: typeof executeCode }> { @@ -100,10 +105,24 @@ async function getPythonRunner( } describe('.createVisualizationV2', () => { + let manager: IJupyterManager let pythonRunner: Awaited> + beforeAll(async () => { + manager = new JupyterManager( + 'http', + 'localhost', + 8888, + getVar('JUPYTER_TOKEN') + ) + }) + + afterAll(async () => { + await manager.stop() + }) + beforeEach(async () => { - pythonRunner = await getPythonRunner('workspaceId', 'sessionId') + pythonRunner = await getPythonRunner(manager, 'workspaceId', 'sessionId') }) afterEach(async () => { @@ -124,6 +143,7 @@ describe('.createVisualizationV2', () => { xAxisSort: 'ascending', xAxisGroupFunction: null, yAxes: [], + filters: [], }, manager, pythonRunner.runPython @@ -138,418 +158,182 @@ describe('.createVisualizationV2', () => { const code = `import pandas as pd df = pd.DataFrame({ - 'integers': [11, 12, 13, 21, 22, 33], - 'datetimes': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03', '2021-02-01', '2021-03-02', '2021-03-03']), + 'amount': [11, 12, 13, 21, 22, 33], + 'price': [1.1, 1.2, 1.3, 2.1, 2.2, 3.3], + 'datetime': pd.to_datetime(['2021-01-01', '2021-01-02', '2021-01-03', '2021-02-01', '2021-02-02', '2021-03-03']), + 'fruit': ['apple', 'banana', 'pineapple', 'banana', 'apple', 'apple'] })` - const integersDFColumn: DataFrameColumn = { + const fruitDFColumn: DataFrameColumn = { + type: 'str', + name: 'fruit', + } + + const amountDFColumn: DataFrameColumn = { type: 'int', - name: 'integers', + name: 'amount', + } + + const priceDFColumn: DataFrameColumn = { + type: 'float', + name: 'price', } - const datetimesDFColumn: DataFrameColumn = { + const datetimeDFColumn: DataFrameColumn = { type: 'datetime64', - name: 'datetimes', + name: 'datetime', } const df: DataFrame = { name: 'df', - columns: [integersDFColumn, datetimesDFColumn], + columns: [fruitDFColumn, amountDFColumn, priceDFColumn, datetimeDFColumn], } - const cases: { - name: string - input: VisualizationV2BlockInput - result: VisualizationV2BlockOutputResult - }[] = [ - { - name: 'datetime by integer groupedColumn', - input: { - dataframeName: 'df', - chartType: 'groupedColumn', - xAxis: datetimesDFColumn, - xAxisName: null, - xAxisSort: 'ascending', - xAxisGroupFunction: null, - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'bar', - datasetIndex: 0, - }, - ], - }, - }, - { - name: 'integer by integer groupedColumn', - input: { - dataframeName: 'df', - chartType: 'groupedColumn', - xAxis: integersDFColumn, - xAxisName: null, - xAxisSort: 'ascending', - xAxisGroupFunction: null, - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['integers', 'integers'], - source: [ - { integers: 11 }, - { integers: 12 }, - { integers: 13 }, - { integers: 21 }, - { integers: 22 }, - { integers: 33 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'bar', - datasetIndex: 0, - }, - ], - }, - }, - { - name: 'datetime by integer group by month', - input: { - dataframeName: 'df', - chartType: 'groupedColumn', - xAxis: datetimesDFColumn, - xAxisName: null, - xAxisSort: 'ascending', - xAxisGroupFunction: 'month', - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-01T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-01T00:00:00', integers: 22 }, - { datetimes: '2021-03-01T00:00:00', integers: 33 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'bar', - datasetIndex: 0, - }, - ], - }, - }, + const chartTypeOptions: ChartType[] = [ + 'groupedColumn', + 'stackedColumn', + 'hundredPercentStackedColumn', + 'line', + 'area', + 'hundredPercentStackedArea', + 'scatterPlot', + // 'pie', + // 'histogram', + // 'trend', + // 'number', + ] + const xAxisOptions = [datetimeDFColumn, amountDFColumn] + const xAxisSortOptions = ['ascending' as const, 'descending' as const] + const xAxisGroupByOptions: (TimeUnit | null)[] = [ + null, + 'year', + 'quarter', + 'month', + 'week', + 'date', + 'hours', + 'minutes', + 'seconds', + ] + const yAxisOptions = [ { - name: 'datetime desc by integer groupedColumn', - input: { - dataframeName: 'df', - chartType: 'groupedColumn', - xAxis: datetimesDFColumn, - xAxisName: null, - xAxisSort: 'descending', - xAxisGroupFunction: null, - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'bar', - datasetIndex: 0, - }, - ], - }, + left: [amountDFColumn], + right: [], }, { - name: 'datetime by integer area', - input: { - dataframeName: 'df', - chartType: 'area', - xAxis: datetimesDFColumn, - xAxisName: null, - xAxisSort: 'descending', - xAxisGroupFunction: null, - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'line', - areaStyle: {}, - datasetIndex: 0, - }, - ], - }, + left: [amountDFColumn, priceDFColumn], + right: [], }, { - name: 'datetime by integer multi series', - input: { - dataframeName: 'df', - chartType: 'groupedColumn', - xAxis: datetimesDFColumn, - xAxisName: null, - xAxisSort: 'ascending', - xAxisGroupFunction: null, - yAxes: [ - { - series: [ - { - axisName: null, - chartType: null, - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - { - axisName: null, - chartType: 'line', - column: integersDFColumn, - aggregateFunction: null, - colorBy: null, - }, - ], - }, - ], - }, - result: { - dataset: [ - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - ], - }, - { - dimensions: ['datetimes', 'integers'], - source: [ - { datetimes: '2021-01-01T00:00:00', integers: 11 }, - { datetimes: '2021-01-02T00:00:00', integers: 12 }, - { datetimes: '2021-01-03T00:00:00', integers: 13 }, - { datetimes: '2021-02-01T00:00:00', integers: 21 }, - { datetimes: '2021-03-02T00:00:00', integers: 22 }, - { datetimes: '2021-03-03T00:00:00', integers: 33 }, - ], - }, - ], - xAxis: [ - { - type: 'category', - }, - ], - yAxis: [ - { - type: 'value', - }, - ], - series: [ - { - type: 'bar', - datasetIndex: 0, - }, - { - type: 'line', - datasetIndex: 1, - }, - ], - }, + left: [amountDFColumn], + right: [priceDFColumn], }, ] + const yAxisAggregateFunctionOptions: (AggregateFunction | null)[] = [ + null, + 'sum', + 'mean', + 'median', + 'count', + 'min', + 'max', + ] + const yAxisGroupByOptions = [null, fruitDFColumn] - for (const test of cases) { - it(test.name, async () => { - await ( - await pythonRunner.runPython( - 'workspaceId', - 'sessionId', - code, - () => {}, - { - storeHistory: true, - } - ) - ).promise + let i = 0 + for (const chartType of chartTypeOptions) { + for (const xAxis of xAxisOptions) { + for (const xAxisSort of xAxisSortOptions) { + for (const xAxisGroupBy of xAxisGroupByOptions) { + for (const yAxisAggregateFunction of yAxisAggregateFunctionOptions) { + for (const yAxisGroupBy of yAxisGroupByOptions) { + for (const yAxis of yAxisOptions) { + const yAxes: YAxisV2[] = [] + const leftAxisSeries: SeriesV2[] = [] + for (const left of yAxis.left) { + leftAxisSeries.push({ + axisName: null, + chartType: null, + column: left, + aggregateFunction: yAxisAggregateFunction, + groupBy: yAxisGroupBy, + }) + } + if (leftAxisSeries.length > 0) { + yAxes.push({ series: leftAxisSeries }) + } + + const rightAxisSeries: SeriesV2[] = [] + for (const right of yAxis.right) { + rightAxisSeries.push({ + axisName: null, + chartType: null, + column: right, + aggregateFunction: yAxisAggregateFunction, + groupBy: yAxisGroupBy, + }) + } + if (rightAxisSeries.length > 0) { + yAxes.push({ series: rightAxisSeries }) + } + + const input: VisualizationV2BlockInput = { + dataframeName: 'df', + chartType, + xAxis, + xAxisName: null, + xAxisSort, + xAxisGroupFunction: xAxisGroupBy, + yAxes, + filters: [], + } + + // only datetime can be grouped by in x-axis + if (xAxis.name !== 'datetime' && xAxisGroupBy) { + continue + } + + const checksum = crypto + .createHash('sha256') + .update(JSON.stringify(input)) + .digest('hex') + it(`${checksum}`, async () => { + await ( + await pythonRunner.runPython( + checksum, + checksum, + code, + () => {}, + { + storeHistory: true, + } + ) + ).promise + + const result = await ( + await createVisualizationV2( + 'workspaceId', + checksum, + df, + input, + manager, + pythonRunner.runPython + ) + ).promise - const result = await ( - await createVisualizationV2( - 'workspaceId', - 'sessionId', - df, - test.input, - manager, - pythonRunner.runPython - ) - ).promise + expect(result.success).toBe(true) - expect(result.success).toBe(true) - if (result.success) { - expect(result.data).toEqual(test.result) + // this makes jest write input to snapshot which is usefull + // for debugging when the test fails + expect(input).toMatchSnapshot() + + expect(result).toMatchSnapshot() + }) + } + } + } + } } - }) + } } - - afterAll(async () => { - await manager.stop() - }) }) diff --git a/apps/api/src/python/visualizations-v2.ts b/apps/api/src/python/visualizations-v2.ts index bb75ed7f..13b7c7db 100644 --- a/apps/api/src/python/visualizations-v2.ts +++ b/apps/api/src/python/visualizations-v2.ts @@ -18,6 +18,7 @@ import { logger } from '../logger.js' function getCode(dataframe: DataFrame, input: VisualizationV2BlockInput) { const strInput = JSON.stringify(input) let code = `import json +import pandas as pd from datetime import datetime def _briefer_create_visualization(df, options): @@ -54,24 +55,55 @@ def _briefer_create_visualization(df, options): return value - def group_dataframe(df, options): - if options["xAxisGroupFunction"]: - freq = { - 'year': 'Y', - 'quarter': 'Q', - 'month': 'M', - 'week': 'W', - 'date': 'D', - 'hours': 'h', - 'minutes': 'min', - 'seconds': 's' - }.get(options["xAxisGroupFunction"], None) - - if freq: - df[options["xAxis"]["name"]] = pd.to_datetime(df[options["xAxis"]["name"]]) - # Group by the specified frequency but keep all rows + def group_dataframe(df, options, y_axis, series): + freqs = { + "year": "Y", + "quarter": "Q", + "month": "M", + "week": "W", + "date": "D", + "hours": "h", + "minutes": "min", + "seconds": "s" + } + + y_group_by = series["groupBy"]["name"] if series["groupBy"] else None + grouping_columns = ["_grouped"] + ([y_group_by] if y_group_by else []) + + if pd.api.types.is_datetime64_any_dtype(df[options["xAxis"]["name"]]): + if options["xAxisGroupFunction"] and series["aggregateFunction"]: + freq = freqs.get(options["xAxisGroupFunction"], "s") + + y_axis_agg_func = series["aggregateFunction"] + datetime_agg_funcs = set(['count', 'mean', 'median']) + if pd.api.types.is_datetime64_any_dtype(df[series["column"]["name"]]): + if y_axis_agg_func not in datetime_agg_funcs: + y_axis_agg_func = 'count' + + # Group by the specified frequency and aggregate the values df["_grouped"] = df[options["xAxis"]["name"]].dt.to_period(freq).dt.start_time - return df + df = df.groupby(grouping_columns).agg({ + series["column"]["name"]: y_axis_agg_func + }).reset_index() + elif options["xAxisGroupFunction"]: + freq = freqs.get(options["xAxisGroupFunction"], "s") + + df[options["xAxis"]["name"]] = pd.to_datetime(df[options["xAxis"]["name"]]) + + # Group by the specified frequency + df[options["xAxis"]["name"]] = df[options["xAxis"]["name"]].dt.to_period(freq).dt.start_time + elif series["aggregateFunction"]: + y_axis_agg_func = series["aggregateFunction"] + datetime_agg_funcs = set(['count', 'mean', 'median']) + if pd.api.types.is_datetime64_any_dtype(df[series["column"]["name"]]): + if y_axis_agg_func not in datetime_agg_funcs: + y_axis_agg_func = 'count' + + df["_grouped"] = df[options["xAxis"]["name"]] + df = df.groupby(grouping_columns).agg({ + series["column"]["name"]: y_axis_agg_func + }).reset_index() + return df @@ -86,7 +118,7 @@ def _briefer_create_visualization(df, options): def get_series_df(df, options, y_axis, series): # Prepare data by grouping - result = group_dataframe(df.copy(), options) + result = group_dataframe(df.copy(), options, y_axis, series) if "_grouped" in result: result[options["xAxis"]["name"]] = result["_grouped"] result = result.drop(columns=["_grouped"]) @@ -97,47 +129,68 @@ def _briefer_create_visualization(df, options): data = { + "tooltip": { + "trigger": "axis", + }, "dataset": [], "xAxis": [{ - "type": "category", + "type": "category", + "axisPointer": { + "type": "shadow", + }, }], "yAxis": [], "series": [], } - defaultType, _ = extract_chart_type(options["chartType"]) for y_axis in options["yAxes"]: - data["yAxis"].append({ - "type": "value", - }) + data["yAxis"].append({ "type": "value" }) for series in y_axis["series"]: series_dataframe = get_series_df(df, options, y_axis, series) chart_type, is_area = extract_chart_type(series["chartType"] or options["chartType"]) - dataset_index = len(data["dataset"]) - dataset = { - "dimensions": [options["xAxis"]["name"], series["column"]["name"]], - "source": [], - } - for _, row in series_dataframe.iterrows(): - x_name = options["xAxis"]["name"] - x_value = convert_value(series_dataframe[x_name], row[x_name]) - - y_name = series["column"]["name"] - y_value = convert_value(series_dataframe[y_name], row[y_name]) - dataset["source"].append({x_name: x_value, y_name: y_value}) - - data["dataset"].append(dataset) - - serie = { - "type": chart_type, - "datasetIndex": dataset_index - } - if is_area: - serie["areaStyle"] = {} - - data["series"].append(serie) + if series["groupBy"]: + groups = series_dataframe[series["groupBy"]["name"]].unique() + groups.sort() + else: + groups = [None] + + for group in groups: + dataset_index = len(data["dataset"]) + dataset = { + "dimensions": [options["xAxis"]["name"], series["column"]["name"]], + "source": [], + } + + for _, row in series_dataframe.iterrows(): + if group and row[series["groupBy"]["name"]] != group: + continue + + x_name = options["xAxis"]["name"] + x_value = convert_value(series_dataframe[x_name], row[x_name]) + + y_name = series["column"]["name"] + y_value = convert_value(series_dataframe[y_name], row[y_name]) + + row_data = {x_name: x_value, y_name: y_value} + + dataset["source"].append(row_data) + + data["dataset"].append(dataset) + + serie = { + "type": chart_type, + "datasetIndex": dataset_index, + } + + if group: + serie["name"] = group + + if is_area: + serie["areaStyle"] = {} + + data["series"].append(serie) output = json.dumps({ "type": "result", @@ -164,8 +217,6 @@ else: }, default=str) print(output)` - console.log(code) - return code } diff --git a/apps/api/src/yjs/v2/executor/visualization.ts b/apps/api/src/yjs/v2/executor/visualization.ts index 6739fb7d..5339ea85 100644 --- a/apps/api/src/yjs/v2/executor/visualization.ts +++ b/apps/api/src/yjs/v2/executor/visualization.ts @@ -284,6 +284,7 @@ export class VisualizationExecutor implements IVisualizationExecutor { } else { } executionItem.setCompleted('success') + block.setAttribute('error', null) } catch (err) { logger().error( { diff --git a/apps/web/prod/next.config.js b/apps/web/prod/next.config.js new file mode 100644 index 00000000..82f30642 --- /dev/null +++ b/apps/web/prod/next.config.js @@ -0,0 +1,46 @@ +const path = require('path') + +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: 'standalone', + experimental: { + outputFileTracingRoot: path.join(__dirname, '../../'), + esmExternals: 'loose', + }, + transpilePackages: [], + webpack(config, { dev, isServer }) { + if (dev && !isServer) { + const originalEntry = config.entry + config.entry = async () => { + const wdrPath = path.resolve(__dirname, './scripts/wdyr.ts') + const entries = await originalEntry() + + if (entries['main.js'] && !entries['main.js'].includes(wdrPath)) { + entries['main.js'].push(wdrPath) + } + return entries + } + } + + return config + }, + headers() { + return [ + { + source: '/(.*)', + headers: [ + { + key: 'X-Frame-Options', + value: 'DENY', + }, + { + key: 'Content-Security-Policy', + value: "frame-ancestors 'none'", + }, + ], + }, + ] + }, +} + +module.exports = nextConfig diff --git a/apps/web/prod/package.json b/apps/web/prod/package.json new file mode 100644 index 00000000..ee467fdb --- /dev/null +++ b/apps/web/prod/package.json @@ -0,0 +1,171 @@ +{ + "name": "@briefer/web", + "version": "0.0.85", + "private": true, + "scripts": { + "dev": "next dev -p 4000", + "build": "next build", + "start": "node dist/server.js", + "lint": "next lint", + "test": "jest --passWithNoTests" + }, + "dependencies": { + "@aarkue/tiptap-math-extension": "^1.3.1", + "@briefer/database": "*", + "@briefer/editor": "*", + "@briefer/types": "*", + "@cocalc/ansi-to-react": "^7.0.0", + "@codemirror/lang-python": "^6.0.0", + "@codemirror/lang-sql": "6.7.1", + "@codemirror/merge": "^6.0.0", + "@date-fns/utc": "^1.2.0", + "@google-cloud/bigquery": "^7.3.0", + "@google-cloud/common": "^5.0.1", + "@headlessui/react": "^1.7.19", + "@heroicons/react": "^2.0.18", + "@lezer/common": "1.2.1", + "@monaco-editor/react": "^4.6.0", + "@react-email/render": "^0.0.9", + "@replit/codemirror-vscode-keymap": "6.0.2", + "@simbathesailor/use-what-changed": "^2.0.0", + "@tailwindcss/forms": "^0.5.6", + "@tailwindcss/typography": "^0.5.10", + "@tiptap/core": "^2.2.2", + "@tiptap/extension-collaboration": "^2.2.4", + "@tiptap/extension-color": "^2.3.0", + "@tiptap/extension-document": "^2.2.4", + "@tiptap/extension-focus": "^2.2.2", + "@tiptap/extension-highlight": "^2.3.0", + "@tiptap/extension-image": "^2.4.0", + "@tiptap/extension-link": "^2.3.0", + "@tiptap/extension-placeholder": "^2.2.4", + "@tiptap/extension-task-item": "^2.7.4", + "@tiptap/extension-task-list": "^2.7.4", + "@tiptap/extension-text": "^2.2.4", + "@tiptap/extension-text-style": "^2.3.0", + "@tiptap/extension-underline": "^2.2.4", + "@tiptap/pm": "^2.2.2", + "@tiptap/react": "^2.2.2", + "@tiptap/starter-kit": "^2.2.4", + "@types/js-cookie": "^3.0.6", + "@types/react-vega": "^7.0.0", + "@types/react-window": "^1.8.8", + "@uidotdev/usehooks": "^2.4.1", + "axios": "^1.6.2", + "bcrypt": "^5.1.1", + "busboy": "^1.6.0", + "clsx": "^2.0.0", + "codemirror": "^6.0.0", + "copy-to-clipboard": "^3.3.3", + "cron": "^3.1.6", + "cron-parser": "^4.9.0", + "cronstrue": "^2.44.0", + "csv-writer": "^1.6.0", + "d3-format": "^3.1.0", + "d3-time-format": "^4.1.0", + "date-fns": "^3.6.0", + "date-fns-tz": "^3.1.3", + "dexie": "^4.0.8", + "dompurify": "^3.0.8", + "express": "^4.18.2", + "fast-diff": "^1.3.0", + "fastest-levenshtein": "^1.0.16", + "form-data": "^4.0.0", + "fuse.js": "^7.0.0", + "immutable": "^5.0.0-beta.5", + "js-cookie": "^3.0.5", + "jsonwebtoken": "^9.0.2", + "katex": "^0.16.11", + "lodash.debounce": "^4.0.8", + "lru-cache": "^10.2.2", + "lucide-react": "^0.378.0", + "monaco-editor": "^0.47.0", + "next": "13.5.5", + "node-fetch": "^3.3.2", + "papaparse": "^5.4.1", + "pg": "^8.11.3", + "pg-query-stream": "^4.5.3", + "plotly.js": "^2.27.1", + "posthog-js": "^1.160.3", + "ramda": "^0.29.1", + "react": "^18.2.0", + "react-calendly": "^4.3.0", + "react-copy-to-clipboard": "^5.1.0", + "react-day-picker": "9.0.4", + "react-dnd": "^16.0.1", + "react-dnd-html5-backend": "^16.0.1", + "react-dom": "^18", + "react-dropzone": "^14.2.3", + "react-github-btn": "^1.4.0", + "react-grid-layout": "^1.2.5", + "react-hook-form": "^7.47.0", + "react-hotkeys-hook": "^4.5.0", + "react-input-mask": "^2.0.4", + "react-plotly.js": "^2.6.0", + "react-sizeme": "^3.0.2", + "react-spinners": "^0.13.8", + "react-vega": "^7.6.0", + "react-virtualized": "^9.22.5", + "react-window": "^1.8.10", + "resend": "^2.0.0", + "simplebar-react": "^3.2.5", + "socket.io-client": "^4.7.2", + "swr": "^2.2.4", + "timezones-list": "^3.0.2", + "uuid": "^9.0.1", + "vega": "^5.27.0", + "vega-lite": "^5.16.1", + "vega-tooltip": "^0.33.0", + "y-indexeddb": "^9.0.12", + "y-monaco": "^0.1.5", + "y-prosemirror": "1.0.20", + "y-protocols": "^1.0.6", + "y-websocket": "^1.5.1", + "yjs": "^13.6.14", + "zod": "^3.22.4" + }, + "devDependencies": { + "@testing-library/jest-dom": "^6.4.2", + "@testing-library/react": "^14.2.2", + "@trivago/prettier-plugin-sort-imports": "^4.2.0", + "@types/bcrypt": "^5.0.1", + "@types/busboy": "^1.5.3", + "@types/d3-format": "^3.0.4", + "@types/d3-time-format": "^4.0.3", + "@types/dompurify": "^3.0.5", + "@types/express": "^4.17.21", + "@types/formidable": "^3.4.5", + "@types/jest": "^29.5.12", + "@types/jsonwebtoken": "^9.0.5", + "@types/levenshtein": "^1.0.4", + "@types/lodash.debounce": "^4.0.9", + "@types/node": "^20", + "@types/papaparse": "^5.3.10", + "@types/pg": "^8.10.7", + "@types/plotly.js": "^2.12.30", + "@types/ramda": "^0.29.9", + "@types/react-copy-to-clipboard": "^5.0.7", + "@types/react-dom": "^18", + "@types/react-grid-layout": "^1.3.5", + "@types/react-input-mask": "^3.0.5", + "@types/react-plotly.js": "^2.6.3", + "@types/react-virtualized": "^9.21.30", + "@types/socket.io-client": "^3.0.0", + "@types/uuid": "^9.0.6", + "@welldone-software/why-did-you-render": "^8.0.1", + "autoprefixer": "^10", + "dotenv": "^16.3.1", + "eslint": "^8", + "eslint-config-next": "13.5.5", + "eslint-config-prettier": "^9.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "postcss": "^8", + "postcss-import": "^16.1.0", + "prettier": "^3.0.3", + "readline-sync": "^1.4.10", + "tailwindcss": "^3", + "ts-node": "^10.9.1", + "typescript": "^5" + } +} diff --git a/apps/web/src/components/Dashboard/GridElement.tsx b/apps/web/src/components/Dashboard/GridElement.tsx index a8d5d0bc..92cbf5df 100644 --- a/apps/web/src/components/Dashboard/GridElement.tsx +++ b/apps/web/src/components/Dashboard/GridElement.tsx @@ -261,7 +261,8 @@ function GridElement(props: Props) { const showEdit = canEdit && !isEditingBlock const WrapperElement = - props.block?.getAttribute('type') === BlockType.Visualization + props.block?.getAttribute('type') === BlockType.Visualization || + props.block?.getAttribute('type') === BlockType.VisualizationV2 ? 'div' : ScrollBar diff --git a/apps/web/src/components/v2Editor/customBlocks/sql/index.tsx b/apps/web/src/components/v2Editor/customBlocks/sql/index.tsx index 214a2388..335a33d0 100644 --- a/apps/web/src/components/v2Editor/customBlocks/sql/index.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/sql/index.tsx @@ -824,7 +824,7 @@ const ToChartButton = (props: ToChartButtonProps) => { blockGroupId, blockId, { - type: BlockType.Visualization, + type: BlockType.VisualizationV2, dataframeName: props.block.getAttribute('dataframeName')?.value ?? null, }, 'after' diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx index f3c29e42..e0943731 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/Combobox.tsx @@ -19,7 +19,7 @@ interface Props { disabled?: boolean } -export default function Combobox(props: Props) { +export default function ComboboxV2(props: Props) { const [query, setQuery] = useState(null) const buttonRef = useRef(null) const inputContainerRef = useRef(null) diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx index f766e7ca..f29788f4 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/FilterSelector.tsx @@ -36,7 +36,7 @@ import { InformationCircleIcon, XMarkIcon } from '@heroicons/react/20/solid' import AxisSelector from '../../../AxisSelector' import Combobox from './Combobox' import clsx from 'clsx' -import MultiCombobox from './MultiCombobox' +import MultiComboboxV2 from './MultiCombobox' import { preventPropagation } from '@/utils/events' import { equals, identity } from 'ramda' import ReactDOM from 'react-dom' @@ -290,7 +290,7 @@ interface Props { isInvalid: boolean disabled?: boolean } -function FilterSelector(props: Props) { +function FilterSelectorV2(props: Props) { const onRemove = useCallback(() => { props.onRemove(props.filter) }, [props.onRemove, props.filter]) @@ -735,7 +735,7 @@ function FilterSelector(props: Props) { {VisualizationStringFilterMultiValuesOperator.safeParse( operator ).success ? ( - } value={Array.from(value)} options={ @@ -801,4 +801,4 @@ function FilterValueLabel() { ) } -export default FilterSelector +export default FilterSelectorV2 diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx index e8184a54..138c1e94 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/MultiCombobox.tsx @@ -25,7 +25,7 @@ interface Props { disabled?: boolean } -export default function MultiCombobox(props: Props) { +export default function MultiComboboxV2(props: Props) { const [query, setQuery] = useState(null) const buttonRef = useRef(null) diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx index c9bec965..0239b037 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationControls.tsx @@ -15,15 +15,16 @@ import { DataFrameDateColumn, DataFrameStringColumn, DataFrameNumberColumn, + YAxisV2, } from '@briefer/types' import ChartTypeSelector from '@/components/ChartTypeSelector' import AxisSelector from '@/components/AxisSelector' import AxisModifierSelector from '@/components/AxisModifierSelector' import { useCallback, useEffect, useMemo, useState } from 'react' import useResettableState from '@/hooks/useResettableState' -import VisualizationSettingsTabs, { Tab } from './VisualizationSettingTabs' -import YAxisPicker from './YAxisPicker' -import VisualizationToggle from './VisualizationToggle' +import VisualizationSettingsTabsV2, { Tab } from './VisualizationSettingTabs' +import YAxisPickerV2 from './YAxisPicker' +import VisualizationToggleV2 from './VisualizationToggle' import { PortalTooltip } from '@/components/Tooltips' import { sortWith, ascend, GT } from 'ramda' import ScrollBar from '@/components/ScrollBar' @@ -41,8 +42,16 @@ interface Props { onChangeXAxisSort: (sort: 'ascending' | 'descending') => void xAxisGroupFunction: TimeUnit | null onChangeXAxisGroupFunction: (groupFunction: TimeUnit | null) => void - yAxes: YAxis[] - onChangeYAxes: (yAxes: YAxis[]) => void + yAxes: YAxisV2[] + onChangeYAxes: (yAxes: YAxisV2[]) => void + histogramFormat: HistogramFormat + onChangeHistogramFormat: (format: HistogramFormat) => void + histogramBin: HistogramBin + onChangeHistogramBin: (bin: HistogramBin) => void + numberValuesFormat: string | null + onChangeNumberValuesFormat: (format: string | null) => void + showDataLabels: boolean + onChangeShowDataLabels: (showDataLabels: boolean) => void isEditable: boolean } @@ -55,7 +64,7 @@ function isValidD3Format(format: string): boolean { } } -function VisualizationControls(props: Props) { +function VisualizationControlsV2(props: Props) { const onChangeXAxisGroupFunction = useCallback( (groupFunction: string | null) => { if (groupFunction === null) { @@ -83,101 +92,101 @@ function VisualizationControls(props: Props) { [props.onChangeXAxisSort] ) - // const onChangeHistogramFormat = useCallback( - // (format: string | null) => { - // const parsed = HistogramFormat.safeParse(format) - // if (parsed.success) { - // props.onChangeHistogramFormat(parsed.data) - // } - // }, - // [props.onChangeHistogramFormat] - // ) - - // const onChangeHistogramBin = useCallback( - // (bin: string | null) => { - // if (bin === 'auto') { - // props.onChangeHistogramBin({ type: 'auto' }) - // return - // } - - // if (bin === 'stepSize') { - // props.onChangeHistogramBin({ type: 'stepSize', value: 1 }) - // return - // } - - // if (bin === 'maxBins') { - // props.onChangeHistogramBin({ type: 'maxBins', value: 10 }) - // return - // } - // }, - // [props.onChangeHistogramBin] - // ) - - // const [binText, setBinText] = useResettableState( - // () => (props.histogramBin.type === 'maxBins' ? '10' : '1'), - // [props.histogramBin.type] - // ) - // const onChangeBinText: React.ChangeEventHandler = - // useCallback( - // (e) => { - // setBinText(e.target.value) - // }, - // [setBinText] - // ) - - // useEffect(() => { - // if (props.histogramBin.type === 'auto') { - // return - // } - - // if (props.histogramBin.type === 'stepSize') { - // const value = parseFloat(binText) - // if (Number.isNaN(value) || value <= 0) { - // return - // } - - // props.onChangeHistogramBin({ type: 'stepSize', value }) - // return - // } - - // if (props.histogramBin.type === 'maxBins') { - // const value = Number(binText) - // if (Number.isNaN(value) || !Number.isInteger(value) || value < 2) { - // return - // } - - // props.onChangeHistogramBin({ type: 'maxBins', value }) - // return - // } - // }, [props.histogramBin.type, binText, props.onChangeHistogramBin]) - - // const binError = useMemo(() => { - // if (props.histogramBin.type === 'auto') { - // return null - // } - - // if (props.histogramBin.type === 'stepSize') { - // const value = parseFloat(binText) - // if (isNaN(value) || value <= 0) { - // return 'Must be a positive number.' - // } - - // return null - // } - - // if (props.histogramBin.type === 'maxBins') { - // const value = Number(binText) - // if (Number.isNaN(value) || !Number.isInteger(value)) { - // return 'Must be an integer.' - // } - - // if (value < 2) { - // return 'Must be at least 2.' - // } - - // return null - // } - // }, [props.histogramBin.type, binText]) + const onChangeHistogramFormat = useCallback( + (format: string | null) => { + const parsed = HistogramFormat.safeParse(format) + if (parsed.success) { + props.onChangeHistogramFormat(parsed.data) + } + }, + [props.onChangeHistogramFormat] + ) + + const onChangeHistogramBin = useCallback( + (bin: string | null) => { + if (bin === 'auto') { + props.onChangeHistogramBin({ type: 'auto' }) + return + } + + if (bin === 'stepSize') { + props.onChangeHistogramBin({ type: 'stepSize', value: 1 }) + return + } + + if (bin === 'maxBins') { + props.onChangeHistogramBin({ type: 'maxBins', value: 10 }) + return + } + }, + [props.onChangeHistogramBin] + ) + + const [binText, setBinText] = useResettableState( + () => (props.histogramBin.type === 'maxBins' ? '10' : '1'), + [props.histogramBin.type] + ) + const onChangeBinText: React.ChangeEventHandler = + useCallback( + (e) => { + setBinText(e.target.value) + }, + [setBinText] + ) + + useEffect(() => { + if (props.histogramBin.type === 'auto') { + return + } + + if (props.histogramBin.type === 'stepSize') { + const value = parseFloat(binText) + if (Number.isNaN(value) || value <= 0) { + return + } + + props.onChangeHistogramBin({ type: 'stepSize', value }) + return + } + + if (props.histogramBin.type === 'maxBins') { + const value = Number(binText) + if (Number.isNaN(value) || !Number.isInteger(value) || value < 2) { + return + } + + props.onChangeHistogramBin({ type: 'maxBins', value }) + return + } + }, [props.histogramBin.type, binText, props.onChangeHistogramBin]) + + const binError = useMemo(() => { + if (props.histogramBin.type === 'auto') { + return null + } + + if (props.histogramBin.type === 'stepSize') { + const value = parseFloat(binText) + if (isNaN(value) || value <= 0) { + return 'Must be a positive number.' + } + + return null + } + + if (props.histogramBin.type === 'maxBins') { + const value = Number(binText) + if (Number.isNaN(value) || !Number.isInteger(value)) { + return 'Must be an integer.' + } + + if (value < 2) { + return 'Must be at least 2.' + } + + return null + } + }, [props.histogramBin.type, binText]) const onChangeXAxisName = useCallback( (e: React.ChangeEvent) => { @@ -212,21 +221,21 @@ function VisualizationControls(props: Props) { [props.yAxes, props.onChangeYAxes] ) - // const onChangeNumberValuesFormat = useCallback( - // (e: React.ChangeEvent) => { - // if (e.target.value === '') { - // props.onChangeNumberValuesFormat(null) - // return - // } - // props.onChangeNumberValuesFormat(e.target.value) - // }, - // [props.onChangeNumberValuesFormat] - // ) + const onChangeNumberValuesFormat = useCallback( + (e: React.ChangeEvent) => { + if (e.target.value === '') { + props.onChangeNumberValuesFormat(null) + return + } + props.onChangeNumberValuesFormat(e.target.value) + }, + [props.onChangeNumberValuesFormat] + ) const [tab, setTab] = useState('general') const onChangeYAxis = useCallback( - (yAxis: YAxis, index: number) => { + (yAxis: YAxisV2, index: number) => { props.onChangeYAxes(props.yAxes.map((y, i) => (i === index ? yAxis : y))) }, [props.yAxes, props.onChangeYAxes] @@ -250,7 +259,7 @@ function VisualizationControls(props: Props) { axisName: null, column: null, aggregateFunction: null, - colorBy: null, + groupBy: null, chartType: null, }, ], @@ -348,7 +357,7 @@ function VisualizationControls(props: Props) { props.isHidden ? 'w-0' : 'w-1/3 border-r border-gray-200' )} > - +
)} - {/* {props.chartType === 'histogram' ? ( */} - {/* <> */} - {/* */} - {/* */} - {/* {props.histogramBin.type !== 'auto' && ( */} - {/*
*/} - {/*
*/} - {/* */} - {/* */} - {/*
*/} - {/*
*/} - {/* {binError} */} - {/*
*/} - {/*
*/} - {/* )} */} - {/* */} - {/* ) : ( */} - - {/* )} */} + {props.chartType === 'histogram' ? ( + <> + + + {props.histogramBin.type !== 'auto' && ( +
+
+ + +
+
+ {binError} +
+
+ )} + + ) : ( + + )}
{props.chartType !== 'histogram' && ( @@ -535,7 +546,7 @@ function VisualizationControls(props: Props) { : undefined ) .map((yAxis, i) => ( -
- {}} + enabled={props.showDataLabels} + onToggle={props.onChangeShowDataLabels} />
@@ -635,21 +644,21 @@ function VisualizationControls(props: Props) {
- {/* */} - {/* {props.numberValuesFormat && */} - {/* !isValidD3Format(props.numberValuesFormat ?? '') && ( */} - {/*
*/} - {/* Invalid format string */} - {/*
*/} - {/* )} */} + + {props.numberValuesFormat && + !isValidD3Format(props.numberValuesFormat ?? '') && ( +
+ Invalid format string +
+ )} )} @@ -659,4 +668,4 @@ function VisualizationControls(props: Props) { ) } -export default VisualizationControls +export default VisualizationControlsV2 diff --git a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx index 2fe66cde..371efcfa 100644 --- a/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx +++ b/apps/web/src/components/v2Editor/customBlocks/visualizationV2/VisualizationSettingTabs.tsx @@ -21,7 +21,7 @@ interface Props { tab: Tab onChange: (tab: Tab) => void } -export default function VisualizationSettingsTabs(props: Props) { +export default function VisualizationSettingsTabsV2(props: Props) { return (