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

Statsmodel Probplot Tick自定义

  •  0
  • beto5243  · 技术社区  · 7 年前

    我用Python中的StatsModels创建了一个累积概率图,但轴上的刻度太多了。 Too many xticks

    我只希望在0.1、10、50、90、99和99.9处有记号。有人知道怎么做吗?我尝试使用下面的代码,但它只给了我前n个刻度,这使得它非常无用(参见下图)

    Too few ticks

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    import matplotlib.ticker as ticker
    import statsmodels.api as sm
    
    csv = pd.read_csv('cumProbMaxData.csv')  
    data = csv.values.tolist()
    
    flat_list = [item for sublist in data for item in sublist]
    fig,ax = plt.subplots()
    
    x = np.array(flat_list)
    pp_x = sm.ProbPlot(x, fit=True)
    figure = pp_x.probplot(exceed=False, ax=ax, marker='.', color='k', markersize=12)
    
    plt.xlabel('Cumulative Probability (%)')
    plt.ylabel('Maximum CO$_2$ Flux (g m$^-$$^2$ d$^-$$^1$)')
    tick_spacing=5
    ax.xaxis.set_major_locator(ticker.MaxNLocator(tick_spacing))
    
    plt.tight_layout()
    plt.show()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   ImportanceOfBeingErnest    7 年前

    Statsmodels公司 ProbPlot 以实际单位绘制数据。只有轴的刻度才会改变,以显示某个百分比值。这通常是一种糟糕的风格,但如果你想使用它,当然你必须接受它 ProbPlot公司 .

    解决在使用 FixedLocator FixedFormatter 将对显示的刻度进行二次采样。要显示的标签位于索引处 locs = [0,3,6,10,14,17,20] (要显示标签0、3、6等)。 您可以使用此列表从显示的记号中仅选择列表中的记号,如下所示。

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    import statsmodels.api as sm
    
    x = np.random.randn(200)
    
    fig,ax = plt.subplots()
    
    pp_x = sm.ProbPlot(x, fit=True)
    pp_x.probplot(exceed=False, ax=ax, marker='.', color='k', markersize=12)
    
    locs = [0,3,6,10,14,17,20]
    ax.set_xticklabels(np.array(ax.xaxis.get_major_formatter().seq)[locs])
    ax.set_xticks(ax.get_xticks()[locs])
    
    plt.tight_layout()
    plt.show()
    

    enter image description here