matplotlib 绘制地块时,X轴刻度标注过于密集

xyhw6mcr  于 2023-05-29  发布在  其他
关注(0)|答案(2)|浏览(143)

我正在绘制matplotlib图,我的x轴由YYYYMM格式的年份和月份字符串组成,例如2019年1月的201901
我的问题是,一些数据跨越了很长的一段时间,这使得x轴标记标签如此密集,以至于它们彼此堆积,变得不可读。
我试着把字体变小,我把标签旋转了90度,这对我的一些数据有很大帮助,但它仍然不够。
下面是我的一个x轴的例子,看起来不错:

下面是一个x轴的例子,它太密集,因为数据跨度很长:

所以我希望matplotlib在刻度标签开始相互堆积时跳过打印几个刻度标签。例如,打印1月的标签,跳过打印2月、3月、4月和5月的标签,打印6月的标签,跳过打印7月、8月等的标签。但我不知道该怎么做?
或者有没有其他的方法可以解决这个问题?

vm0i2vca

vm0i2vca1#

快速的脏解决方案如下:

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

这将仅显示每 * 秒 * xtick。如果您希望只显示每 * n * 个刻度,您可以使用

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

如果你没有ax的句柄,你可以得到一个ax = plt.gca()
或者,您可以指定要与以下项一起使用的xtick数:
plt.locator_params(axis='x', nbins=10)

ttp71kqs

ttp71kqs2#

替代解决方案可以如下:

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()

相关问题