[Python] Change of basis for log-log plotting, grid in log-scale

Discussão em 'Python' iniciado por Stack, Julho 11, 2025.

  1. Stack

    Stack Membro Participativo

    I want to plot in log scale in both axis, when using the default base, the graph plotted is correct, but since the y variation of my data is small I would like to change for base=2, when I does this the grid is no longer in log scale but evenly spaced with no small ticks (which makes easier to see that this is a log scale plot)

    where is my code for default base

    import numpy as np
    import matplotlib.pyplot as plt

    x = np.array([8, 16, 32, 64, 128, 256, 512, 1024])
    y = np.array([2.412, 3.424, 5.074, 7.308, 11.444, 18.394, 30.644, 48.908])
    base = 2 # Base for logarithmic scale

    fig, ax = plt.subplots(figsize=(8,6))

    # log x and y axis
    ax.plot(x, y, 'o--')
    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.set(title='loglog')
    ax.grid()
    ax.grid(which="minor", color="0.9")


    enter image description here

    when I change the base, by using the argument base in ax.set_xscale()

    import numpy as np
    import matplotlib.pyplot as plt

    x = np.array([8, 16, 32, 64, 128, 256, 512, 1024])
    y = np.array([2.412, 3.424, 5.074, 7.308, 11.444, 18.394, 30.644, 48.908])
    base = 2 # Base for logarithmic scale

    fig, ax = plt.subplots(figsize=(8,6))

    # log x and y axis
    ax.plot(x, y, 'o--')
    ax.set_xscale('log', base=base)
    ax.set_yscale('log', base=base)
    ax.set(title='loglog')
    ax.grid()
    ax.grid(which="minor", color="0.9")


    enter image description here

    The graphs I created are correct, what I want is aesthetic. Keep these little ticks "logarithmly" spaced.
    I have tried to use ax.loglog(x, y, '0--', base=base) instead of ax.plot(x, y, 'o--'), and also tried to manually set the tickers with

    def ticks(y, pos):
    return r'$2^{:.0f}$'.format(np.log(y)/np.log(base)) if y > 0 else '0'

    ax.xaxis.set_major_formatter(ticker.FuncFormatter(ticks))
    ax.yaxis.set_major_formatter(ticker.FuncFormatter(ticks))


    None of that work.

    What I want is aesthetics, both graphs are correct, but these little ticks "logarithmly" spaced makes the graph easier to interpret as log-log plot.

    Continue reading...

Compartilhe esta Página