Prevent axes from being in scientific notation (powers of 10) using matplotlib in Python on semilogy plot

后端 未结 1 1202
南方客
南方客 2020-12-21 15:51

I\'ve read here (How to prevent numbers being changed to exponential form in Python matplotlib figure) and here (Matplotlib: disable powers of ten in log plot) and tried the

相关标签:
1条回答
  • 2020-12-21 16:24

    How do you want to display 10^15? As 1000000000000000 ?! The other answer applies to the default formatter, when you switch to log scale a LogFormatter is used which has a different set of rules. You can switch back to ScalarFormatter and disable the offset

    import matplotlib.pyplot as plt
    import matplotlib.ticker as mticker
    plt.ion()
    
    possible_chars = 94
    max_length = 8
    pw_possibilities = [] 
    for num_chars in range(1, max_length+1):
        pw_possibilities.append(possible_chars**num_chars)
    
    x = range(1, max_length+1)
    y = pw_possibilities 
    
    #plot 
    fig, ax = plt.subplots()
    ax.semilogy(x, y, 'o-')
    ax.set_xlabel("num chars in password")
    ax.set_ylabel("number of password possibilities")
    ax.set_title("password (PW) possibilities verses # chars in PW")
    ax.yaxis.set_major_formatter(mticker.ScalarFormatter())
    ax.yaxis.get_major_formatter().set_scientific(False)
    ax.yaxis.get_major_formatter().set_useOffset(False)
    fig.tight_layout()
    plt.show()
    

    See http://matplotlib.org/api/ticker_api.html for all of the available Formatter classes.

    (this image is generated off of the 2.x branch, but should work on all recent version of mpl)

    0 讨论(0)
提交回复
热议问题