В matplotlib: есть ли способ установить линии сетки ниже полос / линий / патчей, сохранив метки выше?

Относится к Matplotlib: рисование линий сетки за другими элементами графа, но у меня ничего не работало.

У меня есть следующий график, на котором я хочу скрыть линии сетки под красной линией, сохранив метки над красной линией:

import numpy as np
import matplotlib.pyplot as plt

#plot
r = np.arange(0, 3.0, 0.01)
theta = 2 * np.pi * r
ax = plt.subplot(111, polar=True)
ax.plot(theta, r, color='r', linewidth=20)
ax.set_rmax(2.0)
ax.grid(True, lw=2)
#set labels
label_pos = np.linspace(0.0, 2 * np.pi, 6, endpoint=False)
ax.set_xticks(label_pos)
label_cols = ['Label ' + str(num) for num in np.arange(6)]
ax.set_xticklabels(label_cols, size=24)

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

Я могу получить красную линию сверху с помощью ax.set_axisbelow(True).

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

Но я не могу найти способ удерживать красную линию над линиями сетки, сохраняя метки над красной линией. Добавление zorder=-1 к команде построения помещает красную линию внизу, даже если я добавляю ax.set_axisbelow(True). ax.set_zorder(-1)) тоже пока не работает.

Как я могу получить линии сетки внизу (самый нижний порядок), за которыми следует красная линия, а затем метки вверху красной линии?


person joelostblom    schedule 08.04.2015    source источник


Ответы (1)


Вы всегда можете построить сетку вручную:

import numpy as np
import matplotlib.pyplot as plt

#plot
r = np.arange(0, 3.0, 0.01)
theta = 2 * np.pi * r
rmax = 2.0
n_th = 6
th_pos = np.linspace(0.0, 2 * np.pi, n_th, endpoint=False)
n_r = 5
r_pos = np.linspace(0, rmax, n_r)


ax = plt.subplot(111, polar=True)

## Plot the grid    
for pos in th_pos:
    ax.plot([th_pos]*2, [0, rmax], 'k:', lw=2)
for pos in r_pos[1:-1]:
    x = np.linspace(0, 2*np.pi, 50)
    y = np.zeros(50)+pos
    ax.plot(x, y, 'k:', lw=2)

## Plot your data
ax.plot(theta, r, color='r', linewidth=20)
ax.set_rmax(rmax)
ax.grid(False)

#set ticks and labels
ax.set_xticks(th_pos)
label_cols = ['Label ' + str(num) for num in np.arange(n_th)]
ax.set_xticklabels(label_cols, size=24)
ax.set_yticks(r_pos[1:])


plt.show()

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

person Julien Spronck    schedule 08.04.2015
comment
Спасибо! Я думал о том, чтобы построить их индивидуально, но надеялся на простую перестановку zorder. Это не слишком много лишнего кода, он примет через пару дней, если не найдется ничего более простого. - person joelostblom; 08.04.2015
comment
Звучит хорошо :-) Я подумал, что вы могли бы предпочесть более простое решение. - person Julien Spronck; 08.04.2015
comment
@cheflo нашли лучшее решение? - person Julien Spronck; 15.04.2015