garrettj403/SciencePlots

[Feature] siunitx mplstyle

Aberta

#101 aberto em 1 de jul. de 2023

 (3 comentários) (1 reação) (0 responsável)Python (658 forks)batch import
enhancementgood first issue

Métricas do repositório

Stars
 (6.088 estrelas)
Métricas de merge de PR
 (Mesclagem média 17h 3m) (2 fundiu PRs em 30d)

Description

Hello, hope you are doing great.

There is this package siunitx which allows for a better usage of units in latex. This allows for different usage of units inside latex and to be more consistent in their use inside and outside of equations.

I believe it would be easy to implement in SciencePlots as an additional mplstyle.

Proposal

For this it could be easy to create a latex-siunitx.mplstyle inside the misc folder with the line

text.latex.preamble :\usepackage{amsmath} \usepackage{amssymb} \usepackage{siunitx}

Example

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

x = np.linspace(0.75, 1.25, 201)

def model(x, p):
    return x ** (2 * p + 1) / (1 + x ** (2 * p))

With the current implementation units would be like

pparam = dict(xlabel='Voltage (mV)', ylabel=r'Current ($\mu$A)')

with plt.style.context(['science']):
    fig, ax = plt.subplots()
    for p in [10, 15, 20, 30, 50, 100]:
        ax.plot(x, model(x, p), label=p)
    ax.legend(title='Order')
    ax.autoscale(tight=True)
    ax.set(**pparam)
    fig.savefig('fig01.png', dpi=300)
    plt.close()

fig01

with the new implementation it would change to

pparam = dict(xlabel=r'Voltage (\si{\milli\volt})', ylabel=r'Current (\si{\micro\ampere})')

with plt.style.context(['science','latex-siunitx']):
    fig, ax = plt.subplots()
    for p in [10, 15, 20, 30, 50, 100]:
        ax.plot(x, model(x, p), label=p)
    ax.legend(title='Order')
    ax.autoscale(tight=True)
    ax.set(**pparam)
    fig.savefig('fig01-siunitx.png', dpi=300)
    plt.close()

fig01-siunitx

Caveats

The only problem I seem to find with this is that if another style changes the text.latex.preamble line it would clash. It would be a problem for nature, russian-font, turkish-font, latex-sans, pgf and sans. Also it wouldn't work with styles that don't use latex like notebook.

Maybe this could be worked around in some way.

Best, Fran

Guia do colaborador