【发布时间】:2018-11-22 00:30:27
【问题描述】:
因为图片问题比较长,实际内容不多。问题在底部。
嗨, 我有一系列 30000 个样本,年龄从 21 岁到 74 岁不等。 系列头:
0 24
1 26
2 34
3 37
4 57
Name: AGE, dtype: int64
我使用 Pandas 内置功能 .plot 绘制它:
age_series = original_df['AGE']
fig = plt.figure()
fig.suptitle('Age distribution')
age_series.value_counts().sort_index().plot(kind='bar')
我可以增加条之间的水平宽度,但我不想这样做。相反,我只想让 x 轴标签的一个子集可见。
我尝试使用MaxNLocator 和MultipleLocator 添加这一行:
plt.gca().xaxis.set_major_locator(plt.MaxNLocator(10))
但是,它没有达到我的目标,因为它现在错误地标记了条形图并删除了刻度(我理解,因为使用这些函数会更改 xticks 对象):
一个丑陋的解决方案是在 xticks 对象内循环:
xticks = plt.gca().xaxis.get_major_ticks()
for i in range(len(xticks)):
if i % 10 != 0:
xticks[i].set_visible(False)
但是我不满意,因为循环太天真了。我希望能够访问 xticks(标签)中的值并对其做出决定,以便仅显示 10 个标签的倍数。
这可行(基于this answer):
for i, l in enumerate(labels):
val = int(l.get_text())
if val % 10 != 0:
labels[i] = ''
plt.gca().set_xticklabels(labels)
问题:是否有任何不同的解决方案,感觉更 Pythonic/高效?或者您对如何使这些数据具有可读性有什么建议?
【问题讨论】:
标签: python python-3.x pandas matplotlib axis-labels