我如何绘制点,以便它们出现在matplotlib的脊柱顶部?

Pet*_*sen 5 matplotlib

以下生成带有三个数据点的图,分别为(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')
Run Code Online (Sandbox Code Playgroud)

编辑: Amro的建议 - 显而易见的方法 - 不是首选方法,因为这些是ROC图(通常用两个轴上的0到1的方框绘制).如果我可以欺骗matplotlib产生与http://www.google.com/search?q=roc+plot上的许多类似的结果,这些结果在两个轴上都有一个紧紧围绕0..1的框,但是在顶部绘制了点轴线尽可能多,这将是最佳的.

编辑2:我猜这可以使用" 脊柱放置 "(新的MPL 0.99)完成,绘图区域略微放大,如Amro所示,但随后脊柱重新定位略微沿两个0轴.我将试验这个并发布一个答案,如果它有效,尽管可以随意打败我.

tom*_*m10 7

您可以在绘图命令中或通过调用"plot"返回的艺术家对象中关闭剪辑.

首先,这是图,带有额外的大符号,所以很清楚:

替代文字

在plot命令中你可以做到

ax.plot([0, 0, 1], [0, 0.5, 1], 'o', clip_on=False, markersize=20)
Run Code Online (Sandbox Code Playgroud)

或者你可以拥有

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

  • 我还需要添加 zorder=3 ,这样这些点就会出现在脊椎上(如果存在的话,网格),而不是仅仅从下面向外看,但这是我需要的“技巧”。谢谢你!:) (3认同)