Matplotlib: радиолокационная карта - метки оси

Я пытаюсь построить радиолокационную карту с 15 метками на оси. Данные отображаются правильно, но я не могу правильно определить метки осей. Сюжет, который я получаю, выглядит следующим образом: дружнее

Как видите, количество сгенерированных тиков осей меньше количества сгенерированных баров. Как я могу сгенерировать одинаковое количество тиков (и соответствующих тиковых меток), чтобы четко различать каждую полосу? Я хочу что-то похожее на изображение, показанное ниже: требуется

Код, который я сейчас использую, выглядит следующим образом:

fig = figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)
 sample = np.random.uniform(low=0.5, high=13.3, size=(15,))
 N = len(sample) 
items=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'] 
theta = np.arange(0, 2*np.pi, 2*np.pi/N) 
bars = ax.bar(theta, sample, width=0.4) 
ax.set_xticklabels(items)
 ax.yaxis.grid(True)
 show()

Что мне не хватает? Заранее спасибо!

1 ответ

Решение

С помощью ax.set_xticklabels устанавливает текст меток.

То, что вы действительно хотите, это установить положение меток. В этом случае позиции являются только пунктами theta массив

ax.set_xticks(theta)

После того, как эти галочки установлены, можно, конечно, изменить их метки, которые в этом случае являются только первыми N числа, начинающиеся с 1,

ax.set_xticklabels(range(1, len(theta)+1))

Полный пример:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(8,8))
ax = fig.add_subplot(111,polar=True)

sample = np.random.uniform(low=0.5, high=13.3, size=(15,))
N = len(sample) 

theta = np.arange(0, 2*np.pi, 2*np.pi/N) 
bars = ax.bar(theta, sample, width=0.4)

ax.set_xticks(theta)
ax.set_xticklabels(range(1, len(theta)+1))
ax.yaxis.grid(True)
plt.show()

Обратите внимание, что в версиях matplotlib, предшествующих 2.x, вам необходимо отцентрировать столбцы, чтобы получить результат сверху

bars = ax.bar(theta, sample, width=0.4, align="center")
Другие вопросы по тегам