Python matplotlib打印的刻度太多

Python matplotlib打印的刻度太多,python,matplotlib,plot,Python,Matplotlib,Plot,我有一个输出多个图像的大代码。有时,绘图将如下所示(见下文MWE): 请注意,x轴上的记号几乎彼此重叠,这看起来非常糟糕 我的问题是:为什么matplotlib没有意识到这一点,而只是简单地绘制更少的刻度(就像它通常没有问题一样)?如何强制matplotlib以常规方式绘制更少的记号(即:我不是在寻找仅适用于此特定绘图的解决方案,这只是一个示例) MWE(如果代码看起来不必要的复杂,那是因为它是更大代码的一小部分) 首先将numpy导入为np,然后调用ax.xaxis.set_ticks(n

我有一个输出多个图像的大代码。有时,绘图将如下所示(见下文MWE):

请注意,x轴上的记号几乎彼此重叠,这看起来非常糟糕

我的问题是:为什么matplotlib没有意识到这一点,而只是简单地绘制更少的刻度(就像它通常没有问题一样)?如何强制matplotlib以常规方式绘制更少的记号(即:我不是在寻找仅适用于此特定绘图的解决方案,这只是一个示例)


MWE(如果代码看起来不必要的复杂,那是因为它是更大代码的一小部分)


首先
将numpy导入为np
,然后调用
ax.xaxis.set_ticks(np.arange(xmin,xmax,stepsize))
,其中
xmin
是最小tick值,
xmax
是最大tick值,
stepsize
是连续tick之间的差值。使用
stepsize=(xmax-xmin)/tick\u count
可能有意义,其中
tick\u count
是您想要的tick数。

对于一般解决方案,
stepsize
的值应该是多少?另外
min
max
min()和
max()的保留名称
功能。你是说
min(x)
max(x)
?对不起。我只是用
min
max
作为占位符。它们应该是最小和最大刻度值,因此
min(x)
max(x)
似乎是自然的选择,尽管您可能需要不同的值,这取决于您希望打印的外观<代码>步长应为最大值和最小值之差除以所需的刻度数。我编辑了我的答案以反映这一点。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import random


def scatter_plot(x, y):

    ax = plt.subplot(gs[0:2, 0:2])
    plt.xlim(min(x), 0.00158)
    plt.xlabel('$x$', fontsize=16)
    plt.ylabel('$y$', fontsize=16)
    ax.minorticks_on()

    plt.scatter(x, y)


# Generate random data.
x = [random.random() / 100. for i in xrange(10000)]
y = [random.random() for i in xrange(10000)]
# Define size of output figure.
fig = plt.figure(figsize=(30, 25))  # create the top-level container
gs = gridspec.GridSpec(10, 12)      # create a GridSpec object
# Create plot.
scatter_plot(x, y)
# Save plot to file.
fig.tight_layout()
plt.savefig('out.png', dpi=150)