Skip to content

Commit 1fc9ff4

Browse files
authored
QC plot y-scale option to show delta from mean (#7307)
1 parent 2295f28 commit 1fc9ff4

2 files changed

Lines changed: 28 additions & 5 deletions

File tree

core/webapp/vis/src/plot.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,7 +1612,7 @@ boxPlot.render();
16121612
* @param {Number} [config.properties.boundType] Either 'absolute' or 'stddev', to describe how to interpret the upperBound and lowerBound.
16131613
* Used by LeveyJennings only. Defaults to 'stddev'.
16141614
* @param {String} [config.properties.valueConversion] The data property name for the conversion of the plot to either percent
1615-
* of the mean ('percentDeviation') or standard deviations ('standardDeviation').
1615+
* of the mean ('percentDeviation'), standard deviations ('standardDeviation') or delta from mean ('deltaFromMean').
16161616
* Used by LeveyJennings and Moving Range only.
16171617
* @param {String} [config.properties.defaultGuideSets] The data property name for default std dev and mean needed for percentDeviation
16181618
* or standardDeviation conversion.
@@ -1784,22 +1784,26 @@ boxPlot.render();
17841784
config.properties.TrailingMeanRight ||
17851785
config.properties.TrailingCVRight;
17861786

1787-
var convertToPercentDeviation = function(value, mean) {
1787+
let convertToPercentDeviation = function(value, mean) {
17881788
var calc = Math.round(((value / mean) * 100) * 100) / 100;
17891789
if (isNaN(calc))
17901790
return 100;
17911791

17921792
return calc;
17931793
};
17941794

1795-
var convertToStandardDeviation = function(value, mean, stddev) {
1795+
let convertToStandardDeviation = function(value, mean, stddev) {
17961796
var calc = Math.round(((value - mean) / stddev) * 100) / 100;
17971797
if (isNaN(calc))
17981798
return 0;
17991799

18001800
return calc;
18011801
};
18021802

1803+
let convertToDeltaFromMean = function(value, mean) {
1804+
return (value - mean);
1805+
};
1806+
18031807
var convertValues = function(conversion) {
18041808
if (!conversion)
18051809
return;
@@ -1813,6 +1817,9 @@ boxPlot.render();
18131817
if (conversion === LABKEY.vis.PlotProperties.ValueConversion.PercentDeviation) {
18141818
row[valProp] = convertToPercentDeviation(row[valProp], row[meanProp]);
18151819
}
1820+
else if (conversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
1821+
row[valProp] = convertToDeltaFromMean(row[valProp], row[meanProp]);
1822+
}
18161823
else {
18171824
row[valProp] = convertToStandardDeviation(row[valProp], row[meanProp], row[sdProp]);
18181825
}
@@ -1822,6 +1829,9 @@ boxPlot.render();
18221829
if (conversion === LABKEY.vis.PlotProperties.ValueConversion.PercentDeviation) {
18231830
row[valRightProp] = convertToPercentDeviation(row[valRightProp], row[meanProp]);
18241831
}
1832+
else if (conversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
1833+
row[valRightProp] = convertToDeltaFromMean(row[valRightProp], row[meanProp]);
1834+
}
18251835
else {
18261836
row[valRightProp] = convertToStandardDeviation(row[valRightProp], row[meanProp], row[sdProp]);
18271837
}
@@ -1843,6 +1853,10 @@ boxPlot.render();
18431853
maxValue = config.properties.upperBound + cushion;
18441854
minValue = config.properties.lowerBound - cushion;
18451855
}
1856+
else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
1857+
maxValue = config.properties.upperBound + mean + cushion;
1858+
minValue = config.properties.lowerBound - mean - cushion;
1859+
}
18461860
else {
18471861
maxValue = mean + ((config.properties.upperBound + cushion) * stddev);
18481862
minValue = mean + ((config.properties.lowerBound - cushion) * stddev);
@@ -1981,7 +1995,6 @@ boxPlot.render();
19811995
// Handle value conversions
19821996
convertValues(config.properties.valueConversion);
19831997
if (config.qcPlotType === LABKEY.vis.TrendingLinePlotType.LeveyJennings) {
1984-
19851998
if (config.properties.boundType === LABKEY.vis.PlotProperties.BoundType.Absolute) {
19861999
row.upperBound = config.properties.upperBound;
19872000
row.lowerBound = config.properties.lowerBound;
@@ -2028,6 +2041,11 @@ boxPlot.render();
20282041
}
20292042
}
20302043

2044+
else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
2045+
row.upperBound = convertToDeltaFromMean(row.upperBound, row[meanProp]);
2046+
row.lowerBound = convertToDeltaFromMean(row.lowerBound, row[meanProp]);
2047+
}
2048+
20312049
if (config.properties.yAxisDomain) {
20322050
if (config.properties.yAxisDomain[0] > row.lowerBound) {
20332051
config.properties.yAxisDomain[0] = row.lowerBound - cushion;
@@ -2045,6 +2063,10 @@ boxPlot.render();
20452063
row[sdProp] = 1;
20462064
row[meanProp] = 0;
20472065
}
2066+
else if (config.properties.valueConversion === LABKEY.vis.PlotProperties.ValueConversion.DeltaFromMean) {
2067+
row[sdProp] = 0;
2068+
row[meanProp] = 0;
2069+
}
20482070

20492071
if (!config.properties.valueRight &&
20502072
!config.properties.valueRightMR &&

core/webapp/vis/src/utils.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ if (!LABKEY.vis.PlotProperties) {
4040
if (!LABKEY.vis.PlotProperties.ValueConversion) {
4141
LABKEY.vis.PlotProperties.ValueConversion = {
4242
StandardDeviation: 'standardDeviation',
43-
PercentDeviation: 'percentDeviation'
43+
PercentDeviation: 'percentDeviation',
44+
DeltaFromMean: 'deltaFromMean'
4445
}
4546
}
4647
}

0 commit comments

Comments
 (0)