我有一个数据框=
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()
但是我想格式化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€'] [] 2
为什么我在新标签列表中没有得到20000? 为什么不显示自己的10000?
答案 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)
输出