123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- "use strict";
- exports.__esModule = true;
- exports.default = transformProps;
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
- function transformProps(chartProps) {
- const {
- width,
- height,
- datasource = {},
- formData,
- queryData
- } = chartProps;
- const {
- verboseMap = {}
- } = datasource;
- const {
- colorScheme,
- groupby,
- metrics
- } = formData;
- const data = queryData.data.map(({
- label,
- values
- }) => ({
- label,
- min: values.whisker_low,
- max: values.whisker_high,
- firstQuartile: values.Q1,
- median: values.Q2,
- thirdQuartile: values.Q3,
- outliers: values.outliers
- }));
- const xAxisLabel = groupby.join('/');
- const yAxisLabel = metrics.length > 0 ? verboseMap[metrics[0]] || metrics[0] : '';
- const boxPlotValues = data.reduce((r, e) => {
- r.push(e.min, e.max, ...e.outliers);
- return r;
- }, []);
- const minBoxPlotValue = Math.min(...boxPlotValues);
- const maxBoxPlotValue = Math.max(...boxPlotValues);
- const valueDomain = [minBoxPlotValue - 0.1 * Math.abs(minBoxPlotValue), maxBoxPlotValue + 0.1 * Math.abs(maxBoxPlotValue)];
- return {
- data,
- width,
- height,
- encoding: {
- x: {
- field: 'label',
- type: 'nominal',
- scale: {
- type: 'band',
- paddingInner: 0.15,
- paddingOuter: 0.3
- },
- axis: {
- title: xAxisLabel
- }
- },
- y: {
- field: 'value',
- type: 'quantitative',
- scale: {
- type: 'linear',
- domain: valueDomain
- },
- axis: {
- title: yAxisLabel,
- numTicks: 5,
- format: 'SMART_NUMBER'
- }
- },
- color: {
- field: 'label',
- type: 'nominal',
- scale: {
- scheme: colorScheme
- },
- legend: false
- }
- }
- };
- }
|