Repository: DistrictDataLabs/yellowbrick

Issue:
please specify the same number of colors as labels!
**Describe the bug**
Dear Yellowbrick team,

When I am trying to repeat a code from examples for Stacked Feature Importances (https://www.scikit-yb.org/en/latest/api/model_selection/importances.html?highlight=feature_importance#yellowbrick.model_selection.importances.feature_importances) I receive an error when I fit the model that I should specify the same number of colors as labels. But I am not providing these arguments and I suppose that don't have any variables which can have any confusing names.

**To Reproduce**
```
# Steps to reproduce the behavior (code snippet):
#split dataset
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,stratify = y)

#Import svm model
from sklearn import svm

#Create a svm Classifier
clf = svm.SVC(kernel='linear',probability=True) # Linear Kernel

#Train the model using the training sets
clf.fit(X_train, y_train)

#Predict the response for test dataset
y_pred = clf.predict(X_test)

from yellowbrick.model_selection import FeatureImportances
viz = FeatureImportances(clf, stack=True, relative=False)#,labels = features_formatted)
viz.fit(X_test, y_test)
viz.show()
```
After running cells:
```
/Users/polina_turova/opt/anaconda3/lib/python3.8/site-packages/sklearn/base.py:209: FutureWarning: From version 0.24, get_params will raise an AttributeError if a parameter cannot be retrieved as an instance attribute. Previously it would return None.
  warnings.warn('From version 0.24, get_params will raise an '
---------------------------------------------------------------------------
YellowbrickValueError                     Traceback (most recent call last)
<ipython-input-5-d5e7630146dc> in <module>
      1 from yellowbrick.model_selection import FeatureImportances
      2 viz = FeatureImportances(clf, stack=True, relative=False)#,labels = features_formatted)
----> 3 viz.fit(X_test, y_test)
      4 viz.show()

~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/model_selection/importances.py in fit(self, X, y, **kwargs)
    230 
    231         # Draw the feature importances
--> 232         self.draw()
    233         return self
    234 

~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/model_selection/importances.py in draw(self, **kwargs)
    249             colors = resolve_colors(len(self.classes_), colormap=self.colormap)
    250             legend_kws = {"bbox_to_anchor": (1.04, 0.5), "loc": "center left"}
--> 251             bar_stack(
    252                 self.feature_importances_,
    253                 ax=self.ax,

~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/draw.py in bar_stack(data, ax, labels, ticks, colors, colormap, orientation, legend, legend_kws, **kwargs)
    191     if legend:
    192         legend_kws = legend_kws or {}
--> 193         manual_legend(ax, labels=labels, colors=colors, **legend_kws)
    194     return ax

~/opt/anaconda3/lib/python3.8/site-packages/yellowbrick/draw.py in manual_legend(g, labels, colors, **legend_kwargs)
     82     # Ensure that labels and colors are the same length to prevent odd behavior.
     83     if len(colors) != len(labels):
---> 84         raise YellowbrickValueError(
     85             "please specify the same number of colors as labels!"
     86         )

YellowbrickValueError: please specify the same number of colors as labels!
```
![download](https://user-images.githubusercontent.com/61549119/118780655-f204bf00-b894-11eb-9faf-82e3f84d0a0c.png)
**Dataset**
X and y can be uploaded from this repository: https://github.com/turovapolina/unsupervised-LC-MS-data-treatment
X is a numpy array (69 samples and 83 features)
y is a list of strings with 7 classes 

**Expected behavior**
Same picture as in the example (https://www.scikit-yb.org/en/latest/api/model_selection/importances.html?highlight=feature_importance#yellowbrick.model_selection.importances.feature_importances) with values for all features and all classes 

**Desktop (please complete the following information):**
 - OS: [macOS]
 - Python Version [3.8.3]
 - Yellowbrick Version [3.1.0]




Discussion:

Resolving patch:
diff --git a/yellowbrick/model_selection/importances.py b/yellowbrick/model_selection/importances.py
--- a/yellowbrick/model_selection/importances.py
+++ b/yellowbrick/model_selection/importances.py
@@ -231,6 +231,14 @@ def fit(self, X, y=None, **kwargs):
 
         # Sort the features and their importances
         if self.stack:
+            if len(self.classes_) != self.feature_importances_.shape[0]:
+                raise YellowbrickValueError(
+                    (
+                        "The model used does not return coef_ array in the shape of (n_classes, n_features)."
+                        "  Unable to generate stacked feature importances.  "
+                        "Consider setting the stack parameter to False or using a different model"
+                    )
+                )
             if self.topn:
                 abs_sort_idx = np.argsort(
                     np.sum(np.absolute(self.feature_importances_), 0)


Test patch:
diff --git a/tests/test_model_selection/test_importances.py b/tests/test_model_selection/test_importances.py
--- a/tests/test_model_selection/test_importances.py
+++ b/tests/test_model_selection/test_importances.py
@@ -240,6 +240,22 @@ def test_multi_coefs_stacked(self):
         # Appveyor and Linux conda non-text-based differences
         self.assert_images_similar(viz, tol=17.5)
 
+    def test_stack_param_incorrectly_used_throws_error(self):
+        """
+        Test incorrectly using stack param on a dataset with two classes which
+        does not return a coef_ array in the shape of (n_classes, n_features)
+        """
+        X, y = load_occupancy()
+
+        viz = FeatureImportances(
+            LogisticRegression(solver="liblinear", random_state=222), stack=True
+        )
+
+        expected_error = "The model used does not return coef_ array"
+
+        with pytest.raises(YellowbrickValueError, match=expected_error):
+            viz.fit(X, y)
+
     @pytest.mark.skipif(pd is None, reason="pandas is required for this test")
     def test_fit_dataframe(self):
         """