熊猫图条:显示每第n个xlabel

时间:2019-05-12 01:03:48

标签: python pandas numpy dataframe matplotlib

我正在尝试使用DataFrame.plot.bar()绘制一系列数据。

plot = myData.plot.bar()

但是,由于数据很多,所以Xaxis彼此重叠。

我正在寻找一种方法来显示第n个标签,同时保留所有当前数据

我尝试过的事情: 我通读了axes documentation,发现了一些有用的功能。

我的尝试

ticks = plot.get_xticks()
for tick in ticks:
    if tick%5 != 0:
        tick.set_visible(False)

问题:get_xticks()返回位置,而不是实际的价格变动。因此set_visible将导致错误。

我需要什么帮助: 这是显示每个第n个xlabel的正确方法吗?如果是这样,我已经有了位置,如何获取实际的刻度,以便可以设置每个刻度的可见性。

如果这不是正确的方法,那么正确的方法是什么?

2 个答案:

答案 0 :(得分:4)

如果您只是想关闭刻度线标签,可以通过枚举.get_xticklabels()并关闭要隐藏的标签的可见性来实现。

import pandas as pd
import numpy as np
x = np.linspace(100, 500, 51, dtype=int)

mydata = pd.DataFrame({'A': np.histogram(np.random.normal(300, 100, 500), bins=x)[0]},
    index=x[:-1])

ax = mydata.plot.bar()

这是产生的图 enter image description here

要更改x轴标签,以便仅显示5分之一,请使用enumerate而不是标签位置的值来确定是否应显示它。

for i, t in enumerate(ax.get_xticklabels()):
    if (i % 5) != 0:
        t.set_visible(False)

哪个产生以下情节: enter image description here

答案 1 :(得分:1)

改为尝试xaxis.get_major_ticks()

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({
    'name':['john','mary','peter','jeff','bill','lisa','jose'],
    'age':[23,78,22,19,45,33,20]
})

ax = df.plot(kind='bar',x='name',y='age')
xticks = ax.xaxis.get_major_ticks()
for i,tick in enumerate(xticks):
    if i%5 != 0:
        tick.label1.set_visible(False)

plt.show()