Python Matplotlib:在等高线图上将散点图绘制到前景

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17431441/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 08:11:18  来源:igfitidea点击:

Matplotlib: Scatter Plot to Foreground on top of a Contour Plot

pythonmatplotlibscatter-plotscatter

提问by Mike

Does anyone know a way to bring a scatter plot to the foreground in matplotlib? I have to display the scatter plotting on top of the contour, but by default it is plotted underneath...

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

Thanks in advance!

提前致谢!

采纳答案by sodd

You can manually choose in which order the different plots are to be displayed with the zorderparameter of e.g. the scattermethod.

您可以手动选择不同图的显示顺序zorder,例如scatter方法的参数。

To demonstrate, see the code below, where the scatter plot in the left subplot has zorder=1and in the right subplot it has zorder=-1. The object with the highest zorderis placed on top. This means that the scatter will be placed on top of the contour in the first subplot, while it is placed underneath in the second subplot.

要进行演示,请参阅下面的代码,其中左侧子图中的散点图具有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))

enter image description here

在此处输入图片说明