【问题标题】:How to set the ticks of log scale for x&y axis?如何设置 xy 轴的对数刻度刻度?
【发布时间】:2018-08-14 02:42:35
【问题描述】:

我想绘制一个没有科学记数法的对数刻度图。

    import matplotlib as mpl
    import matplotlib.pyplot as plt

    plt.plot(np.arange(0,10,0.1))

    plt.xscale('log')
    plt.yscale('log')
    plt.xlim(0.1,100)
    plt.ylim(1,10)

    plt.gca().xaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
    plt.gca().yaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
    plt.show()

问题:

  1. Y 轴仍显示科学计数法格式。怎么改?

  2. 如何为 y 轴制作特定的刻度?我试过plt.yticks([1,10]),但还是不行。

  3. 如何去掉 x 和 y 轴刻度的小数点?

【问题讨论】:

    标签: python python-3.x numpy matplotlib plot


    【解决方案1】:

    1.摆脱科学记数法。

    刻度是主要和次要刻度,因此您还需要设置次要格式化程序:

    plt.gca().yaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
    plt.gca().yaxis.set_minor_formatter(mpl.ticker.ScalarFormatter())
    

    2。在特定的自定义位置显示刻度

    摆脱次要刻度标签允许yticks 按预期工作。

    plt.yticks([1,10])
    plt.gca().yaxis.set_minor_formatter(mpl.ticker.NullFormatter())
    

    3.去掉小数点

    我想像0.1 这样的标签去掉小数点是没有意义的。因此,人们可能会选择具有g通用数字格式gStrMethodFormatter

    plt.gca().yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter("{x:g}"))
    

    【讨论】:

    • 谢谢。 "{x:g}" 是做什么的?我也试过plt.gca().yaxis.set_minor_formatter(mpl.ticker.ScalarFormatter()),但是y=10^0y=10^1这两个端点没有变化。
    • g 是一般格式,只显示所需的小数位数。这两个端点是主要刻度,对于那些您需要主要格式化程序的端点。
    【解决方案2】:
    1. 使用plt.ticklabel_format(style='plain') 去掉科学记数法。

    2. 看起来plt.yticks([1,10]) 完成了它的工作。 yticks() 仅添加您提供的特定数字,而不是范围。因此,它添加的刻度位于 y=1 和 y=10,它们恰好位于图形的底部和顶部边缘。如果你想在它们之间有更多的刻度,你可以试试plt.yticks(np.arange(1,10, step=d)),其中'd'是你想要的每一步之间的距离。

    3. 尝试plt.gca().xaxis.set_major_formatter(mpl.ticker.EngFormatter(places=0)) 去掉小数点。

    所有这些都可以在 matplotlib 文档中找到,尽管诚然这需要一些挖掘。

    【讨论】:

    • 谢谢。当我尝试使用plt.ticklabel_format(style='plain') 时,它显示This method only works with the ScalarFormatter.。当我尝试使用 plt.gca().xaxis.set_major_formatter(mpl.ticker.EngFormatter(places=0)) 时,它会在第一个刻度的位置显示 100 m
    猜你喜欢
    • 2013-02-21
    • 2013-01-09
    • 2022-01-02
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多