【问题标题】:matplotlib log axis: display powers of 10 onlymatplotlib 日志轴:仅显示 10 的幂
【发布时间】:2017-11-15 01:54:20
【问题描述】:

我有一个 x 轴范围从 10^9 到 10^12 的对数图。 (这是我第一次发帖,所以我无法发布我的情节图片)

我想更改 x 和 y 轴,以便只显示 10 的幂。 x 轴上的数字类似于 9、10、11、12。

我使用了matplotlib.ticker.LogFormatterExponent(base=10.0, labelOnlyBase=True),但它并不能很好地完成工作。有什么建议吗?

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    LogFormatterExponent(base=10.0, labelOnlyBase=True) 按预期工作。

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.ticker
    
    x = 10**np.linspace(8.5,12.6)
    y = np.sin(x)
    
    fig,ax = plt.subplots()
    ax.scatter(x,y)
    ax.set_xscale('log')
    ax.set_xlabel("Quantity [$10^{x}]$")
    
    logfmt = matplotlib.ticker.LogFormatterExponent(base=10.0, labelOnlyBase=True)
    ax.xaxis.set_major_formatter(logfmt)
    
    plt.show()
    

    【讨论】:

      【解决方案2】:

      在半对数图上以线性比例绘制 X 数据会那么容易吗?

      plt.semilogy(np.log10(x), y)
      

      那么你将得到 X 的十次方。

      例如:

      import numpy as np
      import matplotlib.pyplot as plt
      
      # create some data
      x = 10**np.linspace(0,9,100)
      y = np.sqrt(100 + x)
      
      # plot the figure
      fig = plt.figure()
      ax = fig.add_subplot(111)
      ax.semilogy(np.log10(x), y)
      
      ax.set_xlabel("$10^x$")
      ax.set_ylabel("$\sqrt{100 + x}$")
      

      这给出了:

      【讨论】:

      • 另一种方法是使用ax.set_yscale('log')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      相关资源
      最近更新 更多