         }
     }
 
-    // move the tag and highlight the correct bar
-    func selectBar(at index: Int, animated: Bool, generateFeedback: Bool) {
-        moveTag(toBarViewAt: index, animated: animated, generateFeedback: generateFeedback)
-        highlightBarView(at: index, animated: animated)
-    }
-
     private func indexOfBar(atPoint point: CGPoint) -> Int? {
         return barContainerViews
             .enumerated()
             .first(where: { $0.element.frame.minX <= point.x && point.x <= $0.element.frame.maxX })?.offset
     }
 
-    private func setShowTag(_ showTag: Bool, animated: Bool) {
+    override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
+        guard let panGesture = gestureRecognizer as? UIPanGestureRecognizer else {
+            return super.gestureRecognizerShouldBegin(gestureRecognizer)
+        }
+
+        let velocity = panGesture.velocity(in: self)
+        return abs(velocity.x) > abs(velocity.y)
+    }
+
+}
+
+// MARK: Bar Visibility
+
+extension HistogramView {
+
+    func setShowTag(_ showTag: Bool, animated: Bool) {
         let actions: (() -> Void) = {
             self.tagView.alpha = showTag ? 1 : 0
             self.tagDropDownView.alpha = showTag ? 1 : 0


}

class HistogramView: UIView {

    weak var dataSource: HistogramViewDataSource?

            make.bottom.equalTo(barContainerViews[index].barViewTop)
            make.centerX.equalTo(barContainerViews[index])
        }
        layoutIfAddedToWindow()

        let actions: (() -> Void) = {
            let description = self.dataSource?.histogramView(self, descriptionForDataPointAt: index) ?? NSAttributedString()
