在 x 轴上均匀分布百分位数标签

Even distribution of percentile labels on x axis

请原谅我的术语,我不是统计或绘图方面的专家!

使用 Pandas,我试图绘制最多为“5 个 9”的分位数数据。也就是说,对于具有一系列 'foo' 不均匀分布整数值的给定 DataFrame 'df':

q = df['foo'].quantile([.1, .2, .3, .4, .5, .6, .7, .8, .9, .99, .999, .9999, .99999, 1])
q.plot()

生成一个图表,其中 0.9 和 1.0 之间的 x 轴间隔被压缩:

有没有办法在 x 轴上均匀 space 分位数桶?

谢谢!

我会用 pd.qcut

示例

import pandas as pd
import numpy as np

a = np.sort(np.random.rand(1000))
b = a.repeat(np.arange(len(a)))
b += np.random.rand(len(b)) / 100
s = pd.Series(b)

s.hist()

你想要这个
使用你想要的任何垃圾箱。我用了20。我还传递了一个labels参数。没有它,pandas 将使用切割位置的边缘进行标记。

q = pd.qcut(s, 20, labels=range(20))

采纳 lmo 的建议,这是适合我的解决方案。

对于给定的数据帧 'df' 有一个系列 'A':

percentiles = [.1, .2, .3, .4, .5, .6, .7, .8, .9, .99, .999, .9999, .99999, 1.0]

pct = df['A'].quantile(percentiles)
xticks = range(0, len(percentiles), 1)
ax = pct.plot (xticks=xticks)
ax.set_xticklabels([str(p) for p in percentiles)
plt.show()