Matplotlib:等高线图顶部的前景散点图

Posted

技术标签:

【中文标题】Matplotlib:等高线图顶部的前景散点图【英文标题】:Matplotlib: Scatter Plot to Foreground on top of a Contour Plot 【发布时间】:2013-06-30 03:59:17 【问题描述】:

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

提前致谢!

【问题讨论】:

查看zorder 方法的zorder 参数。 Example usage 来自 matplotlib 站点。 【参考方案1】:

您可以使用 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))

【讨论】:

感谢您的回答。缺少的是 zorder 的参考点。不同绘图函数的默认 zorder 值是多少? @Dr_Zaszuś 默认值在this page 中描述。填充轮廓是“补丁”并且具有默认 zorder 1,而散点图是“集合”并且也具有默认 zorder 1。 OP 可能会调用contourf 调用scatter -- 当 zorder 相同时,它们会按照创建的顺序绘制。

以上是关于Matplotlib:等高线图顶部的前景散点图的主要内容,如果未能解决你的问题,请参考以下文章

Python使用matplotlib模块绘制多条折线图散点图

python3绘图示例4(基于matplotlib:箱线图散点图等)

Matplotlib绘制基本图表

matplotlib画散点图折线图柱状图

pyhton中matplotlib箱线图的绘制(matplotlib双轴图箱线图散点图以及相关系数矩阵图))

Matplotlib使用教程