【问题标题】:matplotlib plots too many ticksmatplotlib 绘制了太多的刻度
【发布时间】:2015-05-13 06:44:14
【问题描述】:

我有一个输出多个图像的大代码。有时,情节看起来像这样(见下面的 MWE):

注意 x 轴上的刻度几乎是相互重叠的,这看起来很糟糕。

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


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

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)

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    首先import numpy as np,然后调用ax.xaxis.set_ticks(np.arange(xmin, xmax, stepsize)),其中xmin是最小刻度值,xmax是最大刻度值,stepsize是连续刻度之间的差值。使用stepsize = (xmax - xmin) / tick_count 可能有意义,其中tick_count 是您想要的刻度数。

    【讨论】:

    • 对于通用解决方案,stepsize 的值应该是多少?
    • 另外,minmax min()max() 函数的保留名称。你的意思是min(x)max(x)
    • 对不起。我只是使用minmax 作为占位符。它们应该是最小和最大刻度值,因此min(x)max(x) 似乎是自然选择,尽管您可能需要不同的值,具体取决于您希望绘图的外观。 stepsize 应该只是最大值和最小值之间的差除以您想要的刻度数。我已经编辑了我的答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多