我在Python中使用StatsModels创建了一个累积概率图,但轴上有太多的刻度。
我希望只有0.1,10,50,90,99和99.9的刻度线。有谁知道如何使这项工作?我尝试使用下面的代码,但它只给了我前n个刻度,使它很无用(见下图。)
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()
答案 0 :(得分:1)
Statsmodels ProbPlot
以实际单位绘制数据。只有轴刻度才会被改变以显示一些百分比值。这通常是糟糕的风格,但如果你想使用ProbPlot
,当然你必须忍受它。
在使用FixedLocator
和FixedFormatter
的情节上显示较少刻度的问题的解决方案是对显示的刻度进行子采样。您要显示的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()