Statsmodel Probplot Tick自定义

时间:2017-12-07 22:58:34

标签: python matplotlib statsmodels

我在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 个答案:

答案 0 :(得分:1)

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

在使用FixedLocatorFixedFormatter的情节上显示较少刻度的问题的解决方案是对显示的刻度进行子采样。您要显示的ticklabels位于索引locs = [0,3,6,10,14,17,20](您想要显示ticklabel 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