python-熊猫-设置x刻度标签

时间:2018-08-24 13:09:14

标签: python pandas

我有一个数据框=

from collections import OrderedDict
dico = OrderedDict({"Cisco" :54496.923851069776,
"Citrix" :75164.2973859488,
"Datacore/veritas/docker/quest" :7138.499540816414,
"Dell / EMC" : 34836.42983441935,
"HPE": 40265.33070005489,
"IBM Hard Ware / IBM services" : 220724.89293359307,
"Microsoft cloud" : 3159.7624999999994,
"Netapp":48898.21721115539,
"Nutanix / Lenovo DCG":38761.815197677075,
"Oracle/Microfocus":100877.21884162886,
"Other brands":13825.151033348895,
"VM Ware":21267.66907692287,
"Veeam / Redhat":5006.715599405339})

我可以绘制:

df = pd.DataFrame(list(dico.values()))
df.index = dico.keys()
ax = df.sort(0).plot.barh()

enter image description here

但是我想格式化xtick标签:

ax = df.sort_values(0).plot.barh()

new_labels = [str(pow(10,i-1))+"€" if i>0 else str(i) for i, tick_label in enumerate(ax.get_xticklabels())]
print(new_labels)
ax.set_xticklabels(new_labels)

给予:

['0','1€','10€','100€','1000€','10000€'] [enter image description here] 2

为什么我在新标签列表中没有得到20000? 为什么不显示自己的10000?

1 个答案:

答案 0 :(得分:2)

您没有得到20000,因为您将10的幂创建为pow(10,i-1)。从数学上讲,不可能从该方程式得出。此外,不会显示10000,因为您只是使用ax.set_xticklabels来重置已经存在的xtick的标签。由于您在第一个绘图中只有5个主要刻度,因此您只能按照定义创建5个标签,分别为0、1、10、100、1000。

要获得所需的内容,只需将代码的最后三行(绘制后)替换为:

locs = ax.get_xticks()
labels = [ '{}{}'.format(int(i), '\u20ac') for i in locs]
ax.set_xticklabels(labels)

输出

enter image description here