2017-01-13 7 views
2

Я работаю над фигурой, где я пытаюсь нарисовать круг поверх комбинации цветов и контура. Круг продолжает рисоваться под контурами, а не сверху (см. Рисунок ниже). Я пробовал переупорядочивать, как я называю imshow, контур и Circle, чтобы посмотреть, могу ли я показать круг, сверху, но мне не повезло. Есть ли способ заставить Круг быть на самом верхнем уровне фигуры? Спасибо за вашу помощь!Рисование кругов на верхнем уровне рисунка

Colormap with contour plot and added circle

+1

мы не можем прочитать в вашем уме - показать код. – furas

+0

в основном для рисования двух элементов в одном месте вам нужно использовать ту же фигуру или оси (я не помню) – furas

ответ

0

Вы можете установить zorder свойство объекта участка, чтобы заставить его быть на вершине других участков в пределах одной и той же axes. Высшее значение zorder будет отображаться поверх нижнего значения zorder.

plt.plot([1, 2], [1, 2], zorder=100) 

По умолчанию патчи имеют zorder из 1, 2D объекты строки имеют zorder из 2 и текст имеет zorder из 3.

3

Используйте zorder kwarg. Это контролирует, какие элементы идут друг на друга. Итак, в этом случае вы хотите увеличить zorder круга. Вам может потребоваться поэкспериментировать, чтобы найти zorder, который даст вам результат, который вам нужен, но правило в том, что выше zorder объектов появляются поверх нижних zorder объектов.

Его трудно точно знать, без какого-либо кода, но предполагает, что вы уже использовали pcolormesh, contour и Circle патч, этот пример показывает эффект не устанавливая zorder (белый круг), и установка zorder=10 (красный круг).

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.patches import Circle 

# Fake data 
x = np.arange(100) 
y = np.arange(100) 
X, Y = np.meshgrid(x, y) 
z = X**0.5 * Y**0.5 

fig, ax = plt.subplots(1) 
ax.set_aspect('equal') 

ax.pcolormesh(X, Y, z, cmap='viridis') 
ax.contour(X, Y, z, colors='k', linewidths=3) 

circ1 = Circle((65, 65), 30, facecolor='None', edgecolor='w', lw=5) 
circ2 = Circle((35, 35), 30, facecolor='None', edgecolor='r', lw=5, zorder=10) 

ax.add_patch(circ1) 
ax.add_patch(circ2) 

plt.show() 

Обратите внимание, что белый круг лежит под черными контурными линиями, но за счет увеличения zorder до 10, красный круг лежит поверх контурных линий.

enter image description here

Смежные вопросы