Matplotlib:在轮廓图上散布到前景图

Mik*_*ike 29 python scatter matplotlib scatter-plot

有没有人知道在matplotlib中将散点图带到前台的方法?我必须在轮廓顶部显示散点图,但默认情况下会在下面绘制...

提前致谢!

sod*_*odd 40

您可以手动选择使用zorder参数(例如scatter方法)显示不同图表的顺序.

为了演示,请参见下面的代码,其中在左插曲散点图有zorder=1和它有正确的插曲zorder=-1.最高的物体zorder放在顶部.这意味着散射将放置在第一个子图中的轮廓顶部,而它位于第二个子图中的下面.

import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)

norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max())
cmap = cm.PRGn

levels = np.arange(-2.0, 1.601, 0.4)

fig, axes = plt.subplots(1,2, sharey=True)

for ax, zord in zip(axes, [1, -1]):
    ax.contourf(X, Y, Z, levels,
                cmap=cm.get_cmap(cmap, len(levels)-1),
                norm=norm)
    ax.autoscale(False) # To avoid that the scatter changes limits
    ax.scatter(np.random.uniform(-3,3,10),
               np.random.uniform(-2,2,10),
               zorder=zord)
    ax.set_title('Scatter with zorder={0}'.format(zord))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 感谢你的回答。缺少的是 zorder 的参考点。不同绘图函数的默认 zorder 值是多少? (3认同)
  • @Dr_Zaszuś 默认值在[本页](https://matplotlib.org/3.1.1/gallery/misc/zorder_demo.html)中描述。填充的等高线是“补丁”,并且具有默认的 zorder“1”,而散点图是“集合”,并且也具有默认的 zorder“1”。OP 可能在调用“scatter”之后调用“contourf”——当 zorder 相同时,它们会按照创建的顺序进行绘制。 (2认同)