在matplotlib中,是否有一种方法可以在条/线/面片下方设置网格线,同时保留上面的tickLabel?

2024-04-25 01:07:01 发布

您现在位置:Python中文网/ 问答频道 /正文

Matplotlib: draw grid lines behind other graph elements有关,但没有对我有用的。在

在下面的图中,我想隐藏红线下的网格线,同时保留红线顶部的标签:

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)

enter image description here

我可以用ax.set_axisbelow(True)在上面画红线。在

enter image description here

但是我找不到一种方法来保持红线在网格线的顶部,同时保留红线顶部的标签。将zorder=-1添加到plot命令中,即使我添加了ax.set_axisbelow(True),也会将红线置于底部。ax.set_zorder(-1))到目前为止也没有起作用。在

我怎样才能得到底部的网格线(最低的zorder),然后是红线,然后是红线顶部的标签?在


Tags: importtrueplotasnpplt标签ax
1条回答
网友
1楼 · 发布于 2024-04-25 01:07:01

始终可以手动打印栅格:

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()

enter image description here

相关问题 更多 >