diff --git a/src/traces/histogram/calc.js b/src/traces/histogram/calc.js
index 8dd1a5f92d3..abb8af1c00b 100644
--- a/src/traces/histogram/calc.js
+++ b/src/traces/histogram/calc.js
@@ -251,16 +251,18 @@ function calcAllAutoBins(gd, trace, pa, mainData, _overlayEdgeCase) {
         var isFirstVisible = true;
         for(i = 0; i < traces.length; i++) {
             tracei = traces[i];
-            pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData);
-            allPos = Lib.concat(allPos, pos0);
-            delete tracei._autoBinFinished;
-            if(trace.visible === true) {
-                if(isFirstVisible) {
-                    isFirstVisible = false;
-                }
-                else {
-                    delete tracei._autoBin;
-                    tracei._autoBinFinished = 1;
+            if(tracei.visible) {
+                pos0 = tracei._pos0 = pa.makeCalcdata(tracei, mainData);
+                allPos = Lib.concat(allPos, pos0);
+                delete tracei._autoBinFinished;
+                if(trace.visible === true) {
+                    if(isFirstVisible) {
+                        isFirstVisible = false;
+                    }
+                    else {
+                        delete tracei._autoBin;
+                        tracei._autoBinFinished = 1;
+                    }
                 }
             }
         }
diff --git a/test/jasmine/tests/histogram_test.js b/test/jasmine/tests/histogram_test.js
index 87e02680ae3..dd7fdf8ebb8 100644
--- a/test/jasmine/tests/histogram_test.js
+++ b/test/jasmine/tests/histogram_test.js
@@ -796,6 +796,8 @@ describe('Test histogram', function() {
                 x: [1, 2, 3], type: 'histogram'
             }, {
                 x: [1, 2, 3], type: 'histogram'
+            }, {
+                type: 'histogram'
             }])
             .then(function() {
                 assertTraceCount(3);
@@ -834,32 +836,33 @@ describe('Test histogram', function() {
             Plotly.newPlot(gd, [
                 {type: 'histogram', x: [1]},
                 {type: 'histogram', x: [10, 10.1, 10.2, 10.3]},
-                {type: 'histogram', x: [20, 20, 20, 20, 20, 20, 20, 20, 20, 21]}
+                {type: 'histogram', x: [20, 20, 20, 20, 20, 20, 20, 20, 20, 21]},
+                {type: 'histogram'}
             ])
             .then(function() {
-                _assertBinCenters([[0], [10], [20]]);
+                _assertBinCenters([[0], [10], [20], hidden]);
                 return Plotly.restyle(gd, 'visible', 'legendonly', [1, 2]);
             })
             .then(function() {
-                _assertBinCenters([[0], hidden, hidden]);
+                _assertBinCenters([[0], hidden, hidden, hidden]);
                 return Plotly.restyle(gd, 'visible', false, [1, 2]);
             })
             .then(function() {
-                _assertBinCenters([[1], hidden, hidden]);
+                _assertBinCenters([[1], hidden, hidden, hidden]);
                 return Plotly.restyle(gd, 'visible', [false, false, true]);
             })
             .then(function() {
-                _assertBinCenters([hidden, hidden, [20, 21]]);
+                _assertBinCenters([hidden, hidden, [20, 21], hidden]);
                 return Plotly.restyle(gd, 'visible', [false, true, false]);
             })
             .then(function() {
-                _assertBinCenters([hidden, [10.1, 10.3], hidden]);
+                _assertBinCenters([hidden, [10.1, 10.3], hidden, hidden]);
                 // only one trace is visible, despite traces being grouped
                 expect(gd._fullLayout.bargap).toBe(0);
                 return Plotly.restyle(gd, 'visible', ['legendonly', true, 'legendonly']);
             })
             .then(function() {
-                _assertBinCenters([hidden, [10], hidden]);
+                _assertBinCenters([hidden, [10], hidden, hidden]);
                 // legendonly traces still flip us back to gapped
                 expect(gd._fullLayout.bargap).toBe(0.2);
             })