我正在尝试使用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的正确方法吗?如果是这样,我已经有了位置,如何获取实际的刻度,以便可以设置每个刻度的可见性。
如果这不是正确的方法,那么正确的方法是什么?
答案 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()
要更改x轴标签,以便仅显示5分之一,请使用enumerate
而不是标签位置的值来确定是否应显示它。
for i, t in enumerate(ax.get_xticklabels()):
if (i % 5) != 0:
t.set_visible(False)
答案 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()