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