如何在maptlotlib中的刻度之间设置固定空格

时间:2018-03-29 13:07:49

标签: python python-2.7 pandas matplotlib

我正在准备延迟百分位数结果的图表。这是我的pd.DataFrame看起来像:

pass

我正在使用此功能(注释行是我已经尝试实现目标的不同pyplot方法):

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
result = pd.DataFrame(np.random.randint(133000, size=(5,3)), columns=list('ABC'), index=[99.0, 99.9, 99.99, 99.999, 99.9999])

And here is the figure:

正如您所看到的,99.0以上所有百分位数的条形重叠并且完全不可读。我想在刻度之间设置一些固定的空间,使它们之间有相同的空间。

2 个答案:

答案 0 :(得分:2)

由于你正在使用pandas,你可以在该库中完成所有这些:

means = df.mean(axis=1)/1000
stds = df.std(axis=1)/1000
means.plot.bar(yerr=stds, fc='b')

# Make some room for the x-axis tick labels
plt.subplots_adjust(bottom=0.2)
plt.show()

enter image description here

答案 1 :(得分:1)

不希望从xnx的答案中取出任何东西(这是最优雅的方式,因为你在pandas工作,因此可能是你的最佳答案)但是关键见解你'重新缺失的是,在matplotlib中,您正在绘制的数据的x 位置和x tick 标签是独立的事物。如果你说:

nominalX = np.arange( 1, 6 ) ** 2
y = np.arange( 1, 6 ) ** 4

positionalX = np.arange(len(y))
plt.bar( positionalX,  y )  # graph y against the numbers 1..n
plt.gca().set(xticks=positionalX + 0.4, xticklabels=nominalX) # ...but superficially label the X values as something else

然后,这与将头寸与您的名义X值绑定不同:

plt.bar( nominalX, y )

请注意,我在刻度线的x位置添加了0.4,因为它是条形bar( ..., width=0.8 )的默认宽度的一半 - 所以刻度线最终位于条形图的中间。