绘制图形时,X轴刻度标签过于密集。

13

我正在绘制matplotlib图表,我的x轴由年月格式的YYYYMM字符串组成,例如201901表示2019年1月。

我的问题是,一些数据跨越了很长时间,这使得x轴刻度标签非常密集,它们会堆叠在一起,变得难以阅读。

我尝试了缩小字体并将标签旋转90度,这确实有所帮助,但对于我的某些数据仍然不够。

这是我的一个x轴的示例,看起来还可以:

x-axis that looks fine

这里是一个示例,x轴过于密集,因为数据跨越了很长一段时间:

x-axis labels that are too dense

我希望matplotlib在刻度标签开始堆叠在一起时跳过打印几个刻度标签。例如,打印1月的标签,跳过打印2月、3月、4月和5月的标签,打印6月的标签,跳过打印7月、8月等的标签。但我不知道该怎么做?

或者还有其他解决这个问题的方法吗?


2
绘制datetime对象而不是字符串,问题就迎刃而解了。 - ImportanceOfBeingErnest
1
字符串被视为等间距的“类别”。如果您在其中放置“boo”,它将与其他字符串一样处理。正如@ImportanceOfBeingErnest所说,最好将其转换为日期时间,以便将x值视为数字处理。 - Jody Klymak
感谢 ImportanceOfBeingErnest 和 Jody 的反馈。 - Canol Gökel
2个回答

27

一个快速而简单的解决方法如下:

ax.set_xticks(ax.get_xticks()[::2])

这将只显示每个第二个xtick。如果您想仅显示每个n-th tick,则会使用

ax.set_xticks(ax.get_xticks()[::n])

如果您没有 ax 的句柄,您可以使用 ax = plt.gca()获取一个。

或者,您可以通过以下方式指定要使用的 xticks 数量:

plt.locator_params(axis='x', nbins=10)


完美的答案,精准且简洁。 - EntzY
快速而粗略的方法赢得比赛。 - Adam Gal

12
以下是一个备选方案:
x = df['Date']
y = df['Value']

# Risize the figure (optional)    
plt.figure(figsize=(20,5))
    
# Plot the x and y values on the graph
plt.plot(x, y)
    
# Here you specify the ticks you want to display
# You can also specify rotation for the tick labels in degrees or with keywords.
plt.xticks(x[::5],  rotation='vertical')

# Add margins (padding) so that markers don't get clipped by the axes
plt.margins(0.2)

# Display the graph
plt.show()

enter image description here


在上面的代码中,您在哪里读取Excel文件? - just_learning
1
@just_learning... Excel文件已经读入到df中。使用df = pandas.read_excel("Excel文件路径")。 - R.K
加个赞为这个轮换 :) - Nir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接