From 76d285e6b2e6c660775661bcea4e943aa884e438 Mon Sep 17 00:00:00 2001 From: Stephen <29995339+blynotes@users.noreply.github.com> Date: Thu, 19 Dec 2019 22:56:44 -0600 Subject: [PATCH 1/4] I added the missing "values_format" parameter to "disp.plot()" call in "plot_confusion_matrix". "disp" is an object of class ConfusionMatrixDisplay. ConfusionMatrixDisplay's plot() function already has the values_format parameter. And the "plot_confusion_matrix" function also has the values_format parameter, but it was not passed when calling plot(). --- sklearn/metrics/_plot/confusion_matrix.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sklearn/metrics/_plot/confusion_matrix.py b/sklearn/metrics/_plot/confusion_matrix.py index 1c3fc2715ffb3..1182b45eda801 100644 --- a/sklearn/metrics/_plot/confusion_matrix.py +++ b/sklearn/metrics/_plot/confusion_matrix.py @@ -197,4 +197,5 @@ def plot_confusion_matrix(estimator, X, y_true, labels=None, disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=display_labels) return disp.plot(include_values=include_values, - cmap=cmap, ax=ax, xticks_rotation=xticks_rotation) + cmap=cmap, ax=ax, xticks_rotation=xticks_rotation, + values_format=values_format) From aa75f9381a17277f1c1492b352dbd550c3f0abdc Mon Sep 17 00:00:00 2001 From: Stephen <29995339+blynotes@users.noreply.github.com> Date: Fri, 20 Dec 2019 21:34:49 -0600 Subject: [PATCH 2/4] Added test coverage to verify 'plot_confusion_matrix' passes through 'values_format' and changes the text in the plot. --- .../_plot/tests/test_plot_confusion_matrix.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py b/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py index dbd515f3527cc..aad20def780d0 100644 --- a/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py +++ b/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py @@ -231,3 +231,22 @@ def test_confusion_matrix_pipeline(pyplot, clf, data, n_classes): assert_allclose(disp.confusion_matrix, cm) assert disp.text_.shape == (n_classes, n_classes) + + +@pytest.mark.parametrize("values_format", ['e', 'n']) +def test_confusion_matrix_text_format(pyplot, data, y_pred, n_classes, + fitted_clf, values_format): + # Make sure plot text is formatted with 'values_format'. + X, y = data + cm = confusion_matrix(y, y_pred) + disp = plot_confusion_matrix(fitted_clf, X, y, + include_values=True, + values_format=values_format) + + assert disp.text_.shape == (n_classes, n_classes) + + expected_text = np.array([format(v, values_format) + for v in cm.ravel(order="C")]) + text_text = np.array([ + t.get_text() for t in disp.text_.ravel(order="C")]) + assert_array_equal(expected_text, text_text) From dd4fc165e78e8e213db2cb4e1352dcc19817e1e1 Mon Sep 17 00:00:00 2001 From: Stephen <29995339+blynotes@users.noreply.github.com> Date: Mon, 30 Dec 2019 16:20:18 -0600 Subject: [PATCH 3/4] Updated Release Notes and removed 'order="C"' from the cm.ravel() call in test_plot_confusion_matrix.py's test_confusion_matrix_text_format() call. --- doc/whats_new/v0.22.rst | 4 ++++ sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/whats_new/v0.22.rst b/doc/whats_new/v0.22.rst index 7ebe82a39b884..b006e28ec157c 100644 --- a/doc/whats_new/v0.22.rst +++ b/doc/whats_new/v0.22.rst @@ -54,6 +54,10 @@ Changelog value of the ``zero_division`` keyword argument. :pr:`15879` by :user:`Bibhash Chandra Mitra `. +- |Fix| Fixed a bug in :func:`metrics.plot_confusion_matrix` to correctly + pass the `values_format` parameter to the :class:`ConfusionMatrixDisplay` + plot() call. :pr:`15937` by :user: `Stephen Blystone `. + :mod:`sklearn.semi_supervised` .............................. diff --git a/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py b/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py index 8a2c651699818..9f708b151b81b 100644 --- a/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py +++ b/sklearn/metrics/_plot/tests/test_plot_confusion_matrix.py @@ -260,7 +260,7 @@ def test_confusion_matrix_text_format(pyplot, data, y_pred, n_classes, assert disp.text_.shape == (n_classes, n_classes) expected_text = np.array([format(v, values_format) - for v in cm.ravel(order="C")]) + for v in cm.ravel()]) text_text = np.array([ - t.get_text() for t in disp.text_.ravel(order="C")]) + t.get_text() for t in disp.text_.ravel()]) assert_array_equal(expected_text, text_text) From 0fcf565b536c727e36ce2dd89aa1ece2e3fbf660 Mon Sep 17 00:00:00 2001 From: Hanmin Qin Date: Tue, 31 Dec 2019 11:40:01 +0800 Subject: [PATCH 4/4] Update v0.22.rst --- doc/whats_new/v0.22.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/whats_new/v0.22.rst b/doc/whats_new/v0.22.rst index b006e28ec157c..74b20810de6db 100644 --- a/doc/whats_new/v0.22.rst +++ b/doc/whats_new/v0.22.rst @@ -56,7 +56,7 @@ Changelog - |Fix| Fixed a bug in :func:`metrics.plot_confusion_matrix` to correctly pass the `values_format` parameter to the :class:`ConfusionMatrixDisplay` - plot() call. :pr:`15937` by :user: `Stephen Blystone `. + plot() call. :pr:`15937` by :user:`Stephen Blystone `. :mod:`sklearn.semi_supervised` ..............................