Matplotlib: точечный график на передний план поверх контурного графика

Кто-нибудь знает способ вывести точечный график на передний план в matplotlib? Мне нужно отобразить точечную диаграмму поверх контура, но по умолчанию она отображается под ней...

Заранее спасибо!


person Mike    schedule 02.07.2013    source источник
comment
Проверьте параметр zorder метода scatter. Пример использования с сайта matplotlib.   -  person sodd    schedule 02.07.2013


Ответы (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))

введите здесь описание изображения

person sodd    schedule 02.07.2013
comment
Спасибо за ответ. Чего не хватает, так это ориентира для zorder. Каковы значения zorder по умолчанию для различных функций графика? - person Dr_Zaszuś; 15.01.2019
comment
@Dr_Zaszuś Значения по умолчанию описаны на этой странице. Залитые контуры — это патчи, и их порядок по умолчанию — 1, а точечные диаграммы — это наборы, и они также имеют порядок по умолчанию 1. OP, вероятно, вызвал contourf после вызова scatter - когда zorders идентичны, они отображаются в том порядке, в котором они были созданы. - person Luke Davis; 17.05.2020