我想使用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' )
此代码会生成如下图:
我喜欢x = 0和x = 4.5的完整圆圈,但我不想要更多的刻度标签,我希望自己的代码能够短而自动尽可能。
答案 0 :(得分:30)
您必须编写一些代码才能执行此操作,但您无需事先了解有关数据的任何信息。换句话说,xx
可以改变,这仍然可以按预期工作(我认为)。
基本上你喜欢你所拥有的x-tick标签,但你并不喜欢这些限制。所以写代码
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()
这导致下图:
正如您所看到的,y值存在相同的问题,您可以按照相同的步骤进行更正。
另一种选择是使用clip_on
关键字关闭该行的剪辑:plt.plot(xx, yy, 'o', clip_on=False)
:
现在圆圈位于边缘,但它们没有被剪裁并延伸超过轴的框架。