使用matplotlib绘制图时,X轴刻度标签太密

时间:2019-02-20 09:42:10

标签: python matplotlib

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

我的问题是某些数据跨度很长,这使x轴刻度标签变得如此密集,以致于它们彼此堆积在一起,变得不可读。

我尝试将字体缩小,然后将标签旋转了90度,这虽然有很大帮助,但是对于我的某些数据还是不够的。

这是我的x轴之一看起来不错的示例:

x-axis that looks fine

下面是一个x轴示例,它太密集了,因为数据跨越了很长一段时间:

x-axis labels that are too dense

因此,我希望matplotlib在刻度标签开始彼此堆积时跳过打印一些刻度标签。例如,打印一月的标签,跳过打印二月,三月,四月和五月的标签,打印六月的标签,跳过打印七月,八月的标签,等等。但是我不知道该怎么做?

或者我可以使用其他解决方案来解决此问题吗?

2 个答案:

答案 0 :(得分:0)

一种快速的肮脏解决方案如下:

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

这只会显示每隔xtick一次。如果您只想显示第n个刻度,则可以使用

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

如果您没有ax的句柄,您可以将其作为ax = plt.gca()

或者,您可以指定要用于的xticks数量:

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

答案 1 :(得分:0)

替代解决方案可能如下:

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