如何使用matplotlib绘制点,使其显示在脊椎顶部?

如何使用matplotlib绘制点,使其显示在脊椎顶部?,matplotlib,Matplotlib,下面生成一个包含三个数据点的绘图,分别位于(0,0)、(0,0.5)和(1,1)。只有位于绘图区域内的部分绘图点(小圆)可见,因此我在拐角处看到四分之一个圆,在左脊柱上看到半个圆 是否有一个技巧可以让所有的点都完全可见,这样它们就不会在轴框架内被剪裁 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure fig = Figu

下面生成一个包含三个数据点的绘图,分别位于(0,0)、(0,0.5)和(1,1)。只有位于绘图区域内的部分绘图点(小圆)可见,因此我在拐角处看到四分之一个圆,在左脊柱上看到半个圆

是否有一个技巧可以让所有的点都完全可见,这样它们就不会在轴框架内被剪裁

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure

fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
ax.plot([0, 0, 1], [0, 0.5, 1], 'o')
fig.canvas.print_figure('test.png')
编辑:Amro的建议——显而易见的方法——不是首选方法,因为这些方法适用于ROC图(通常在两个轴上用0到1的方框绘制)。如果我能诱使matplotlib产生类似于在两个轴上都有一个紧紧围绕着0..1的框,但在轴线顶部绘制点的结果,这将是最佳的


编辑2:我猜这可以使用“”(从MPL 0.99开始新增)完成,绘图区域按照Amro的建议略微放大,但随后脊椎稍微重新定位,以沿两个0轴。我将对此进行试验,并在有效的情况下发布一个答案,不过请随意告诉我。

您可以向各个方向稍微扩展轴限制:

ax = fig.add_subplot(111, xlim=(-0.1,1.1), ylim=(-0.1,1.1))

我使用新的spine.set_position()功能将我的想法与Amro的建议结合起来,略微扩展了边界。以下内容仅适用于matplotlib 1.0或更高版本,因为它依赖于新的spine.set_bounds()调用。(我相信Amro的想法也需要1.0或更高版本,因为xlim/ylim kwargs在0.99.1中对我没有任何帮助。)


我仍然很想知道是否有不同的方法,但在谷歌搜索了很多次之后,我猜测matplotlib在这方面有一个基本限制:所有数据都是由为轴定义的区域紧密剪裁的。

您可以在plot命令或调用“plot”返回的Artister对象中关闭剪裁

首先,这是一个带有超大符号的图,因此很清楚:

在plot命令中,可以执行以下操作:

ax.plot([0, 0, 1], [0, 0.5, 1], 'o', clip_on=False, markersize=20)
或者你也可以

p = ax.plot([0, 0, 1], [0, 0.5, 1], 'o', markersize=20)
for m in p:
    m.set_clip_on(False)

谢谢你的建议,但不幸的是,我认为这对于所涉及的情节类型来说是非常不寻常的。请参阅或使用
页边距(0.1,0.1)
?我还需要添加zorder=3,这样点就出现在脊椎上(如果存在,则出现在网格上),而不仅仅是从下面偷看,但这是我需要的“技巧”。谢谢!:)
p = ax.plot([0, 0, 1], [0, 0.5, 1], 'o', markersize=20)
for m in p:
    m.set_clip_on(False)