代码之家  ›  专栏  ›  技术社区  ›  Rocketq

Matplotlib:如何仅设置TIC的最小值和最大值

  •  2
  • Rocketq  · 技术社区  · 7 年前

    我有非常相似的代码来绘制:

    plt.plot(df_tags[df_tags.detailed_tag == tag]['week'], df_tags[df_tags.detailed_tag == tag].tonality)
    

    输出: enter image description here

    但我只想这样为x轴保留最小值和最大值:

    plt.plot(df_tags[df_tags.detailed_tag == tag]['week'], df_tags[df_tags.detailed_tag == tag].tonality)
    plt.xticks([df_tags['week'].min(), df_tags['week'].max()])
    print (df_tags['week'].min(), df_tags['week'].max())
    

    由于运气不佳,他将第二周作为最后一周,但为什么以及如何解决这一问题: enter image description here

    2 回复  |  直到 7 年前
        1
  •  6
  •   ImportanceOfBeingErnest    7 年前

    由于输入数据未知,因此无法确定回答此问题。解释少量代码 如图所示,其中一个将用于设置刻度 标签,

    t = [df_tags['week'].min(), df_tags['week'].max()]
    plt.xticks(t,t)
    


    解释原因 plt.xticks(t) 单独不起作用:
    初始图的轴有一些记号位置和记号标签集,即对应于 [2018-03, 2018-04, 2018-05,...] 以及相应的标签 [2018-03, 2018-04, 2018-05,...] 。如果您现在仅通过以下方式更改勾号位置: plt.xticks([2018-03, 2018-08]) ,则绘图将只有两个不同的记号位置,但仍然使用相同的标签来占据这些位置。因此,第二个标签 2018-04 将占据第二个(也是最后一个)位置。
    由于这是不需要的,因此应始终设置刻度位置 滴答声标签。这是通过 plt.xticks(ticklocations, ticklabels) ax.set_xticks(ticklocations); ax.set_xticklabels(ticklabels) .
        2
  •  1
  •   Scratch'N'Purr    7 年前

    这个黑客解决方案就是基于这个所以 post

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'week': ['2018-01', '2018-02', '2018-03', '2018-04', '2018-05', '2018-06', '2018-07', '2018-08'], 'val': np.arange(8)})
    
    fig, ax = plt.subplots(1,1)
    ax.plot(df['week'], df['val'])
    for i, label in enumerate(ax.get_xticklabels()):
        if i > 0 and i < len(ax.get_xticklabels()) - 1:
            label.set_visible(False)
    plt.show()
    

    plot