情节边缘上的标记在matplotlib中被切断

时间:2012-02-24 15:25:17

标签: python matplotlib

我想使用matplotlib制作散点图。如果我想使用任何类型的标记,matplotlib的默认绘图行为会切断绘图左侧标记的左半部分,以及绘图右侧标记的右侧。我一直在寻找最自动的方式在图的左侧和右侧添加一些额外的空间,而不添加额外的刻度标签,所以我的标记没有被切断,它也看起来没有x-tick标签不对应任何点。

from matplotlib import pyplot as plt
import numpy as np
xx = np.arange(10)
yy = np.random.random( 10 )
plt.plot(xx, yy, 'o' )

此代码会生成如下图:

enter image description here

我喜欢x = 0和x = 4.5的完整圆圈,但我不想要更多的刻度标签,我希望自己的代码能够短而自动尽可能。

1 个答案:

答案 0 :(得分:30)

您必须编写一些代码才能执行此操作,但您无需事先了解有关数据的任何信息。换句话说,xx可以改变,这仍然可以按预期工作(我认为)。

基本上你喜欢你所拥有的x-tick标签,但你并不喜欢这些限制。所以写代码

  1. 保存刻度,
  2. 调整限制,
  3. 恢复旧刻度。

  4. from matplotlib import pyplot as plt
    import numpy as np
    xx = np.arange(10)
    np.random.seed(101)
    yy = np.random.random( 10 )
    plt.plot(xx, yy, 'o' )
    xticks, xticklabels = plt.xticks()
    # shift half a step to the left
    # x0 - (x1 - x0) / 2 = (3 * x0 - x1) / 2
    xmin = (3*xticks[0] - xticks[1])/2.
    # shaft half a step to the right
    xmax = (3*xticks[-1] - xticks[-2])/2.
    plt.xlim(xmin, xmax)
    plt.xticks(xticks)
    plt.show()
    

    这导致下图: enter image description here

    正如您所看到的,y值存在相同的问题,您可以按照相同的步骤进行更正。


    另一种选择是使用clip_on关键字关闭该行的剪辑:plt.plot(xx, yy, 'o', clip_on=False)

    enter image description here

    现在圆圈位于边缘,但它们没有被剪裁并延伸超过轴的框架。