Добавьте разрыв между меткой и радиолокационной картой в matplotlib - PullRequest
1 голос
/ 29 марта 2019

Мне нужна радиолокационная карта для визуализации некоторых показателей.

Поэтому я взял код из здесь и немного его изменил, чтобы он соответствовал моим потребностям.

Вот код, который я использую для своей радиолокационной карты:

%matplotlib inline
import matplotlib.pyplot as plt
from math import pi

f = plt.figure(figsize=(10,5))

categories=['consistency', 'correctness', 'completeness']
N = len(categories)

values=[59,80,60]
values += values[:1]
values

angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]

ax = f.add_subplot(111, polar=True)

plt.xticks(angles[:-1], categories, color='grey', size=8)

ax.set_rlabel_position(180)
plt.yticks([20,40,60,80,100], ["20","40","60","80","100"], color="grey", size=10)
plt.ylim(0,100)

ax.plot(angles, values, 'o-', linewidth=1, linestyle='solid')

ax.fill(angles, values, 'b', alpha=0.1)

Одна вещь, которую я заметил, это то, что метки - это способ приблизиться к радиолокационной карте, как вы можете видеть здесь потому что они длиннее, чем метки, которые используются в примерах радиолокационных карт.

1 Ответ

0 голосов
/ 31 марта 2019

Я нашел решение в посте, связанном в разделе комментариев.

Вот измененный код:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from math import pi

f = plt.figure(figsize=(8,4))

categories=['consistency', 'correctness', 'completeness']
N = len(categories)

values=[59,80,60]
values += values[:1]
values

angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]

ax = f.add_subplot(111, polar=True)

plt.xticks(angles[:-1], categories, color='grey', size=10)

for label,i in zip(ax.get_xticklabels(),range(0,len(angles))):

    angle_rad=angles[i]
    if angle_rad <= pi/2:
        ha= 'left'
        va= "bottom"

    elif pi/2 < angle_rad <= pi:
        ha= 'right'
        va= "bottom"

    elif pi < angle_rad <= (3*pi/2):
        ha= 'right'
        va= "top"  

    else:
        ha= 'right'
        va= "bottom"

    label.set_verticalalignment(va)
    label.set_horizontalalignment(ha)

ax.set_rlabel_position(180)
plt.yticks([20,40,60,80,100], ["20","40","60","80","100"], color="grey", size=10)
plt.ylim(0,100)

ax.plot(angles, values, 'o-', linewidth=1, linestyle='solid')

ax.fill(angles, values, 'b', alpha=0.1)

Как вы можете видеть здесь метки теперь расположены правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...