Skip to main content

Minimal, beautiful (+ highly-customizable) styles for Matplotlib.

Project description

ambivalent 🤷🏻‍

Sam Foreman 2024-05-13

opinionated $\longrightarrow$ ambivalent 🤷🏻‍

Clean, simple style for Matplotlib figures.

Transparent backgrounds with grey text $\textcolor{#838383}{\blacksquare}$ that are accessible / legible and {light, dark}-mode independent.

Install

python3 -m pip install ambivalent

Getting Started

import ambivalent
import matplotlib.pyplot as plt
plt.style.use(ambivalent.STYLES['ambivalent'])

Examples

seaborn Tips Dataset

Code
import seaborn as sns

tips = sns.load_dataset("tips")
tips.head()

fig, ax = plt.subplots(figsize=(6, 6))  # , ncols=2)

_ = sns.kdeplot(
   data=tips, x="total_bill", hue="size",
   fill=True, common_norm=False, palette="flare_r",
   alpha=.3, linewidth=0,
   ax=ax,  # [0],
)
_ = ax.set_ylabel('')
plt.show()

seaborn Scatter Plot

Code
import seaborn as sns
import matplotlib.pyplot as plt

# Load the example diamonds dataset
diamonds = sns.load_dataset("diamonds")

# Draw a scatter plot while assigning point colors and sizes to different
# variables in the dataset
f, ax = plt.subplots(figsize=(6, 6))
_ = sns.despine(f, left=True, bottom=True)
_ = clarity_ranking = ["I1", "SI2", "SI1", "VS2", "VS1", "VVS2", "VVS1", "IF"]
_ = sns.scatterplot(x="carat", y="price",
                hue="clarity", size="depth",
                palette="flare",
                hue_order=clarity_ranking,
                sizes=(1, 8), linewidth=0,
                data=diamonds, ax=ax)

Histogram + Scatter Plot

Code
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# Simulate data from a bivariate Gaussian
n = 10000
mean = [0, 0]
cov = [(2, .4), (.4, .2)]
rng = np.random.RandomState(0)
x, y = rng.multivariate_normal(mean, cov, n).T

# Draw a combo histogram and scatterplot with density contours
f, ax = plt.subplots(figsize=(6, 6))
_ = sns.scatterplot(x=x, y=y, s=5, color="#666666", alpha=0.3)
_ = sns.histplot(x=x, y=y, bins=50, pthresh=.1, cmap="flare_r")
_ = sns.kdeplot(x=x, y=y, levels=5, color="w", linewidths=1)
_ = ax.set_xlabel('x')
_ = ax.set_ylabel('y')
_ = plt.show()

Jointplot

Code
import seaborn as sns
# Load the penguins dataset
penguins = sns.load_dataset("penguins")
# Show the joint distribution using kernel density estimation
import matplotlib as mpl
with mpl.rc_context(plt.rcParams.update({'axes.grid': False})):
  g = sns.jointplot(
      data=penguins,
      x="bill_length_mm",
      y="bill_depth_mm",
      hue="species",
      edgecolors='none',
      alpha=0.4,
  )
  _ = plt.grid(False)
  plt.show()

Matplotlib Histograms

Code
import matplotlib.pyplot as plt
import numpy as np

n_bins = 10
x = np.random.randn(1000, 3)

plt.rcParams['axes.grid'] = True

fig, ((ax0, ax1), (ax2, ax3)) = plt.subplots(nrows=2, ncols=2)

colors = ['#333333', '#666666', '#999999']
ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)
_ = ax0.legend()
_ = ax0.set_title('bars with legend')

_ = ax1.hist(x, n_bins, density=True, histtype='bar', stacked=True, alpha=0.4)
_ = ax1.set_title('stacked bar')

_ = ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False)
_ = ax2.set_title('stack step (unfilled)')

# Make a multiple-histogram of data-sets with different length.
x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]]
_ = ax3.hist(x_multi, n_bins, histtype='bar')
_ = ax3.set_title('different sample sizes')

_ = fig.tight_layout()
plt.show()

Gallery[^1]

More Examples…

|J_{f}|

|J_{b}|

|J|

[!TIP]

💝 Status

Last Updated: 05/13/2024 @ 21:56:28

[^1]: Examples from Matplotlib Examples

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

ambivalent-0.3.0.tar.gz (91.3 MB view details)

Uploaded Source

Built Distribution

ambivalent-0.3.0-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file ambivalent-0.3.0.tar.gz.

File metadata

  • Download URL: ambivalent-0.3.0.tar.gz
  • Upload date:
  • Size: 91.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.0

File hashes

Hashes for ambivalent-0.3.0.tar.gz
Algorithm Hash digest
SHA256 e3237e5e376c20bd43f6f7e3fe6f6a79dfae99c5c2cfe92881f06b15763c05f5
MD5 6ef6a09beec3ea2104724b75b4c8467d
BLAKE2b-256 40a5a10440f78fc924ee84e4ddb0770c301fe7f917fd33c799f9c989aa68b580

See more details on using hashes here.

File details

Details for the file ambivalent-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: ambivalent-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 26.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.27.0

File hashes

Hashes for ambivalent-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 52ddd5d4427837b43bfb3feb0dc3674687b802fda1b18753f8f5212e9e31a476
MD5 a02148bd4a1afc9643306f1e986e72c5
BLAKE2b-256 7bd1b05ade12f7c0eb12190ae88eb0724fe62476300584fb9b68c4e864398362

See more details on using hashes here.

Supported by

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