Skip to main content

plot a pretty confusion matrix (like Matlab) in python using seaborn and matplotlib

Project description

PyPI - Python Version PyPI Code style: black PyPI - Wheel GitHub Repo stars codecov Tests GitHub Repo stars GitHub License PyPI - Downloads

Confusion Matrix in Python

Plot a pretty confusion matrix (like Matlab) in python using seaborn and matplotlib.

This module get a pretty print confusion matrix from a NumPy matrix or from 2 NumPy arrays (y_test and predictions).

Become a sponsor

Please, consider contributing it to the project. Support the developers who power open source! Invest in open source. It powers your world. Become a sponsor now!

If my open source projects could bring you closer to your goals and you want to say thank you, and you can contribute, feel free to do Buy me a ☕ !

Or Become a sponsor directly on GitHub sponsors page ! You will receive a sponsor badge on your profile.

I will be really thankfull for anything even if it is a coffee or just a kind comment towards my work, because that helps me a lot.

See my projects and my contacts in my Linktree if you want to stay connected!

Installation

pip install pretty-confusion-matrix

Get Started

Plotting from DataFrame:

import numpy as np
import pandas as pd
from pretty_confusion_matrix import pp_matrix

array = np.array([[13,  0,  1,  0,  2,  0],
                  [0, 50,  2,  0, 10,  0],
                  [0, 13, 16,  0,  0,  3],
                  [0,  0,  0, 13,  1,  0],
                  [0, 40,  0,  1, 15,  0],
                  [0,  0,  0,  0,  0, 20]])

# get pandas dataframe
df_cm = pd.DataFrame(array, index=range(1, 7), columns=range(1, 7))
# colormap: see this and choose your more dear
cmap = 'PuRd'
pp_matrix(df_cm, cmap=cmap)

alt text

Plotting from vectors

import numpy as np
from pretty_confusion_matrix import pp_matrix_from_data

y_test = np.array([1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2,
                  3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5])
predic = np.array([1, 2, 4, 3, 5, 1, 2, 4, 3, 5, 1, 2, 3, 4, 4, 1, 4, 3, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 3, 3, 5, 1, 2, 3, 3, 5, 1, 2,
                  3, 4, 4, 1, 2, 3, 4, 1, 1, 2, 3, 4, 1, 1, 2, 3, 4, 1, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 4, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5])

pp_matrix_from_data(y_test, predic)

alt text

Using custom labels in axis

You can customize the labels in axis, whether by DataFrame or vectors.

From DataFrame

To plot the matrix with text labels in axis rather than integer, change the params index and columns of your dataframe. Getting the example one above, just change the line df_cm = pd.DataFrame(array, index=range(1, 7), columns=range(1, 7)) by

col = ['Dog', 'Cat', 'Mouse', 'Fox', 'Bird', 'Chicken']
df_cm = pd.DataFrame(array, index=col, columns=col)

It'll replace the integer labels (1...6) in the axis, by Dog, Cat, Mouse, and so on..

From vectors

It's very similar, in this case you just need to use the columns param like the example below. This param is a positional array, i.e., the order must be the same of the data representation. In this example Dog will be assigned to the class 0, Cat will be assigned to the class 1, and so on and so forth. Getting the example two above, just change the line pp_matrix_from_data(y_test, predic), by

columns = ['Dog', 'Cat', 'Mouse', 'Fox', 'Bird'] 
pp_matrix_from_data(y_test, predic, columns)

It'll replace "class A, ..., class E" in the axis, by Dog, Cat, ..., Bird.

More information about "How to plot confusion matrix with string axis rather than integer in python" in this Stackoverflow answer.

Choosing Colormaps

You can choose the layout of the your matrix by a lot of colors options like PuRd, Oranges and more... To customizer your color scheme, use the param cmap of funcion pp_matrix. To see all the colormap available, please do this:

from matplotlib import colormaps
list(colormaps)

More information about Choosing Colormaps in Matplotlib is available here.

References:

1. MATLAB confusion matrix:

a) Plot Confusion

b) Plot Confusion Matrix Using Categorical Labels

2. Examples and more on Python:

a) How to plot confusion matrix with string axis rather than integer in python

b) Plot-scikit-learn-classification-report

c) Plot-confusion-matrix-with-string-axis-rather-than-integer-in-Python

d) Seaborn heatmap

e) Sklearn-plot-confusion-matrix-with-labels

f) Model-selection-plot-confusion-matrix

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pretty_confusion_matrix-0.8.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pretty_confusion_matrix-0.8.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file pretty_confusion_matrix-0.8.0.tar.gz.

File metadata

  • Download URL: pretty_confusion_matrix-0.8.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pretty_confusion_matrix-0.8.0.tar.gz
Algorithm Hash digest
SHA256 d17842b8beb7235f2c61fc1405d4c23029005de8af2027fda5200347e3a457bf
MD5 2a9176c83e817fbb53335233df4358d7
BLAKE2b-256 b36edc710510a3347a6c6e696c1b84802c2b0d763ed0bcaa462a8373cbbb343a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pretty_confusion_matrix-0.8.0.tar.gz:

Publisher: python-publish.yml on wcipriano/pretty-print-confusion-matrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pretty_confusion_matrix-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pretty_confusion_matrix-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 97d864432fef9ca8c981c16f331e8c75b2716fa1006977ed981265f3630a29bc
MD5 243a882a9db754b2516f0f22eb0bd015
BLAKE2b-256 01b3c3636fe0c89dd731deb2d9405f910bf0870e4a2137001f07f5d207d40646

See more details on using hashes here.

Provenance

The following attestation bundles were made for pretty_confusion_matrix-0.8.0-py3-none-any.whl:

Publisher: python-publish.yml on wcipriano/pretty-print-confusion-matrix

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page