我正在准备延迟百分位数结果的图表。这是我的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])
正如您所看到的,99.0以上所有百分位数的条形重叠并且完全不可读。我想在刻度之间设置一些固定的空间,使它们之间有相同的空间。
答案 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()
答案 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 )
的默认宽度的一半 - 所以刻度线最终位于条形图的中间。