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

ncR*_*ert 16 python matplotlib

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

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

此代码生成如下图形:

在此输入图像描述

我想在x = 0和x = 4.5时使用完整的圆圈,但我不想再使用刻度标签了,我希望尽可能简短且自动化.

Yan*_*ann 32

您必须编写一些代码才能执行此操作,但您不需要事先了解有关数据的任何信息.换句话说,xx可以改变,这仍然会像你期望的那样工作(我认为).

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

  1. 保存蜱,
  2. 调整限制,和
  3. 恢复旧的蜱虫.

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()
Run Code Online (Sandbox Code Playgroud)

这导致下图: 在此输入图像描述

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


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

在此输入图像描述

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