@@ -38,6 +38,23 @@ export function countBarsInCluster(
3838 } ;
3939}
4040
41+ function getBandScaleRange (
42+ isInverse : boolean ,
43+ isSingleValueHistogram : boolean ,
44+ minRange : number ,
45+ maxRange : number ,
46+ bandwidth : number ,
47+ ) : {
48+ start : number ;
49+ end : number ;
50+ } {
51+ const rangeEndOffset = isSingleValueHistogram ? 0 : bandwidth ;
52+ const start = isInverse ? minRange - rangeEndOffset : minRange ;
53+ const end = isInverse ? maxRange : maxRange - rangeEndOffset ;
54+
55+ return { start, end } ;
56+ }
57+
4158/**
4259 * Compute the x scale used to align geometries to the x axis.
4360 * @param xDomain the x domain
@@ -50,6 +67,7 @@ export function computeXScale(
5067 minRange : number ,
5168 maxRange : number ,
5269 barsPadding ?: number ,
70+ enableHistogramMode ?: boolean ,
5371) : Scale {
5472 const { scaleType, minInterval, domain, isBandScale, timeZone } = xDomain ;
5573 const rangeDiff = Math . abs ( maxRange - minRange ) ;
@@ -60,20 +78,30 @@ export function computeXScale(
6078 return new ScaleBand ( domain , [ minRange , maxRange ] , bandwidth , barsPadding ) ;
6179 } else {
6280 if ( isBandScale ) {
63- const intervalCount = ( domain [ 1 ] - domain [ 0 ] ) / minInterval ;
64- const bandwidth = rangeDiff / ( intervalCount + 1 ) ;
65- const start = isInverse ? minRange - bandwidth : minRange ;
66- const end = isInverse ? maxRange : maxRange - bandwidth ;
67- return new ScaleContinuous (
81+ const [ domainMin , domainMax ] = domain ;
82+ const isSingleValueHistogram = ! ! enableHistogramMode && domainMax - domainMin === 0 ;
83+
84+ const adjustedDomainMax = isSingleValueHistogram ? domainMin + minInterval : domainMax ;
85+ const adjustedDomain = [ domainMin , adjustedDomainMax ] ;
86+
87+ const intervalCount = ( adjustedDomain [ 1 ] - adjustedDomain [ 0 ] ) / minInterval ;
88+ const intervalCountOffest = isSingleValueHistogram ? 0 : 1 ;
89+ const bandwidth = rangeDiff / ( intervalCount + intervalCountOffest ) ;
90+
91+ const { start, end } = getBandScaleRange ( isInverse , isSingleValueHistogram , minRange , maxRange , bandwidth ) ;
92+
93+ const scale = new ScaleContinuous (
6894 scaleType ,
69- domain ,
95+ adjustedDomain ,
7096 [ start , end ] ,
7197 bandwidth / totalBarsInCluster ,
7298 minInterval ,
7399 timeZone ,
74100 totalBarsInCluster ,
75101 barsPadding ,
76102 ) ;
103+
104+ return scale ;
77105 } else {
78106 return new ScaleContinuous (
79107 scaleType ,
0 commit comments