All Projects → nschloe → matplotx

nschloe / matplotx

Licence: MIT license
📊 More styles and useful extensions for Matplotlib

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to matplotx

dotfiles
My personal configuration files
Stars: ✭ 120 (-76.33%)
Mutual labels:  dracula, solarized, gruvbox
parsec
A color scheme for people tired of solarized
Stars: ✭ 30 (-94.08%)
Mutual labels:  color-scheme, solarized
dufte
📈 Minimalistic Matplotlib style
Stars: ✭ 196 (-61.34%)
Mutual labels:  matplotlib, matplotlib-style-sheets
dotfiles
My dotfiles with dwm, qtile and awesome.
Stars: ✭ 178 (-64.89%)
Mutual labels:  color-scheme, gruvbox
Intellij Colors Solarized
Solarized Colorscheme for IntelliJ IDEA
Stars: ✭ 3,266 (+544.18%)
Mutual labels:  color-scheme, solarized
lambda-wallpapers
All of my wallpapers in one repo.
Stars: ✭ 123 (-75.74%)
Mutual labels:  dracula, gruvbox
publib
Produce publication-level quality images on top of Matplotlib
Stars: ✭ 34 (-93.29%)
Mutual labels:  matplotlib, matplotlib-style-sheets
dotfiles
My setup
Stars: ✭ 84 (-83.43%)
Mutual labels:  solarized, gruvbox
hyperterm-gruvbox
Hyperterm theme based on gruvbox
Stars: ✭ 16 (-96.84%)
Mutual labels:  gruvbox
Cake
Yummy syntax theme for Atom, Brackets, Sublime Text and Visual Studio Code
Stars: ✭ 47 (-90.73%)
Mutual labels:  color-scheme
taeseung vimrc
Taeseung Lee's vim setting
Stars: ✭ 16 (-96.84%)
Mutual labels:  color-scheme
RandomColorScheme
Flutter plugin to help experiment with different Color Schemes without pain.
Stars: ✭ 77 (-84.81%)
Mutual labels:  color-scheme
slack
🧛🏻‍♂️ Dark theme for Slack
Stars: ✭ 38 (-92.5%)
Mutual labels:  dracula
qmplot
A Python package for creating high-quality manhattan and Q-Q plots from GWAS results.
Stars: ✭ 25 (-95.07%)
Mutual labels:  matplotlib
jupyterlab
🧛🏻‍♂️ Dark theme for JupyterLab
Stars: ✭ 27 (-94.67%)
Mutual labels:  dracula
psyplot
Python package for interactive data visualization
Stars: ✭ 64 (-87.38%)
Mutual labels:  matplotlib
Machine-Learning-with-Iris-Dataset
Data Visualization and Machine Learning with Iris Dataset.
Stars: ✭ 65 (-87.18%)
Mutual labels:  matplotlib
rofi
🧛🏻‍♂️ Dark theme for rofi
Stars: ✭ 97 (-80.87%)
Mutual labels:  dracula
The-Supervised-Learning-Workshop
An Interactive Approach to Understanding Supervised Learning Algorithms
Stars: ✭ 24 (-95.27%)
Mutual labels:  matplotlib
intellij-visual-studio-code-dark-plus
Visual Studio Code Dark Plus theme for JetBrains IDEs
Stars: ✭ 108 (-78.7%)
Mutual labels:  color-scheme

matplotx

Some useful extensions for Matplotlib.

PyPi Version Anaconda Cloud PyPI pyversions DOI GitHub stars Downloads

gh-actions codecov LGTM Code style: black

This package includes some useful or beautiful extensions to Matplotlib. Most of those features could be in Matplotlib itself, but I haven't had time to PR yet. If you're eager, let me know and I'll support the effort.

Install with

pip install matplotx[all]

and use in Python with

import matplotx

See below for what matplotx can do.

Clean line plots (dufte)

matplotlib matplotx.styles.dufte, matplotx.ylabel_top, matplotx.line_labels matplotx.styles.duftify(matplotx.styles.dracula)

The middle plot is created with

import matplotlib.pyplot as plt
import matplotx
import numpy as np

# create data
rng = np.random.default_rng(0)
offsets = [1.0, 1.50, 1.60]
labels = ["no balancing", "CRV-27", "CRV-27*"]
x0 = np.linspace(0.0, 3.0, 100)
y = [offset * x0 / (x0 + 1) + 0.1 * rng.random(len(x0)) for offset in offsets]

# plot
with plt.style.context(matplotx.styles.dufte):
    for yy, label in zip(y, labels):
        plt.plot(x0, yy, label=label)
    plt.xlabel("distance [m]")
    matplotx.ylabel_top("voltage [V]")  # move ylabel to the top, rotate
    matplotx.line_labels()  # line labels to the right
    plt.show()

The three matplotx ingredients are:

  • matplotx.styles.dufte: A minimalistic style
  • matplotx.ylabel_top: Rotate and move the the y-label
  • matplotx.line_labels: Show line labels to the right, with the line color

You can also "duftify" any other style (see below) with

matplotx.styles.duftify(matplotx.styles.dracula)

Further reading and other styles:

Clean bar plots

matplotlib dufte dufte with matplotx.show_bar_values()

The right plot is created with

import matplotlib.pyplot as plt
import matplotx

labels = ["Australia", "Brazil", "China", "Germany", "Mexico", "United\nStates"]
vals = [21.65, 24.5, 6.95, 8.40, 21.00, 8.55]
xpos = range(len(vals))

with plt.style.context(matplotx.styles.dufte_bar):
    plt.bar(xpos, vals)
    plt.xticks(xpos, labels)
    matplotx.show_bar_values("{:.2f}")
    plt.title("average temperature [°C]")
    plt.show()

The two matplotx ingredients are:

  • matplotx.styles.dufte_bar: A minimalistic style for bar plots
  • matplotx.show_bar_values: Show bar values directly at the bars

Extra styles

matplotx contains numerous extra color schemes, e.g., Dracula, Nord, gruvbox, and Solarized, the revised Tableau colors.

import matplotlib.pyplot as plt
import matplotx

# use everywhere:
plt.style.use(matplotx.styles.dracula)

# use with context:
with plt.style.context(matplotx.styles.dracula):
    pass

See here for a full list of extra styles

Other styles:

Smooth contours

plt.contourf matplotx.contours()

Sometimes, the sharp edges of contour[f] plots don't accurately represent the smoothness of the function in question. Smooth contours, contours(), serves as a drop-in replacement.

import matplotlib.pyplot as plt
import matplotx


def rosenbrock(x):
    return (1.0 - x[0]) ** 2 + 100.0 * (x[1] - x[0] ** 2) ** 2


im = matplotx.contours(
    rosenbrock,
    (-3.0, 3.0, 200),
    (-1.0, 3.0, 200),
    log_scaling=True,
    cmap="viridis",
    outline="white",
)
plt.gca().set_aspect("equal")
plt.colorbar(im)
plt.show()

Contour plots for functions with discontinuities

plt.contour matplotx.contour(max_jump=1.0)

Matplotlib has problems with contour plots of functions that have discontinuities. The software has no way to tell discontinuities and very sharp, but continuous cliffs apart, and contour lines will be drawn along the discontinuity.

matplotx improves upon this by adding the parameter max_jump. If the difference between two function values in the grid is larger than max_jump, a discontinuity is assumed and no line is drawn. Similarly, min_jump can be used to highlight the discontinuity.

As an example, take the function imag(log(Z)) for complex values Z. Matplotlib's contour lines along the negative real axis are wrong.

import matplotlib.pyplot as plt
import numpy as np

import matplotx

x = np.linspace(-2.0, 2.0, 100)
y = np.linspace(-2.0, 2.0, 100)

X, Y = np.meshgrid(x, y)
Z = X + 1j * Y

vals = np.imag(np.log(Z))

# plt.contour(X, Y, vals, levels=[-2.0, -1.0, 0.0, 1.0, 2.0])  # draws wrong lines

matplotx.contour(X, Y, vals, levels=[-2.0, -1.0, 0.0, 1.0, 2.0], max_jump=1.0)
matplotx.discontour(X, Y, vals, min_jump=1.0, linestyle=":", color="r")

plt.gca().set_aspect("equal")
plt.show()

Relevant discussions:

spy plots (betterspy)

Show sparsity patterns of sparse matrices or write them to image files.

Example:

import matplotx
from scipy import sparse

A = sparse.rand(20, 20, density=0.1)

# show the matrix
plt = matplotx.spy(
    A,
    # border_width=2,
    # border_color="red",
    # colormap="viridis"
)
plt.show()

# or save it as png
matplotx.spy(A, filename="out.png")
no colormap viridis

There is a command-line tool that can be used to show matrix-market or Harwell-Boeing files:

matplotx spy msc00726.mtx [out.png]

See matplotx spy -h for all options.

License

This software is published under the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].