Можно ли изменить ориентацию оси на радарной диаграмме в Python? - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь построить диаграмму радара, используя следующий код из этого источника .

И моя цель состоит в том, чтобы повернуть реальную ось без необходимости переназначения моих точек данных, поскольку мои данные находятся в масштабе от 1 до 5, где 1 указывает на очень еду, а 5 на очень плохую. (чтобы при обращении точек данных я терял значение шкалы)

(Что было описано здесь )

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

То есть с источником

# Draw ylabels
ax.set_rlabel_position(0)
plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)
plt.ylim(0,40)

Мой подход будет

# Draw ylabels
ax.set_rlabel_position(0)
plt.yticks([30,20,10], ["30","20","10"], color="grey", size=7)  # Reversed labels
plt.ylim(40,0) # Reversed axis, as described above

Но проблема в том, что нижний код никогда не заканчивается. Так что я даже не знаю, как его отладить, поскольку я не получаю никаких ошибок.

Я также не могу повернуть вспять только метки Оси (поскольку при таком подходе можно было бы просто поменять местами данные и метки)

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Посмотрите на следующее ... надеюсь, здесь есть что-то, что вы можете использовать. То, как я заставил это работать, строило rmax-r вместо r. Я также поменял порядок тиков, но сохранил те же метки.

# Set up the data for plotting.
N=20
angles = 2.0*pi*np.linspace(0,1,N)
rmin = 0
rmax = 10
radii = rmax*np.random.random(N)

# Plot the non-reversed plot
plt.figure()
ax = plt.subplot(111,polar = True)
ax.plot(angles,radii)
ax.fill(angles, radii, 'b', alpha=0.1)
n_labels = 5
ticks1 = np.linspace(rmin,rmax,n_labels)
labels = [str(t) for t in ticks1]
plt.yticks(ticks1, labels)
plt.ylim(rmin,rmax)

enter image description here

# Reverse the plot
r2 = radii.max()-radii
plt.figure()
ax = plt.subplot(111,polar = True)
ax.plot(angles, r2)
ticks2 = np.linspace(rmax,rmin,n_labels)
labels = [str(t) for t in ticks1]
plt.yticks(ticks2, labels)
ax.fill_between(angles,r2,rmax,color='b',alpha = 0.1)
plt.ylim(rmin,rmax)

enter image description here

0 голосов
/ 01 апреля 2019

Если вы хотите использовать обратные метки, вы должны использовать plt.yticks([10,20,30], ["30", "20", "10"], ...), поскольку первый параметр соответствует значениям осей, и, поскольку вы еще не инвертировали его, они должны оставаться в этом порядке.

Я проверил инверсию plt.ylim, и она для меня заканчивается, но выдает довольно загадочную ошибку posx and posy should be finite values. Принимая во внимание, что posx и posy не являются параметрами для этих функций, должна существовать базовая функция, которой это не нравится. Кроме того, проверив это на неполярный график, я полагаю, что проблема связана с полярными координатами.

Оглядываясь вокруг, я обнаружил вопрос github и SO вопрос , который привел к PR и последующему слиянию в декабре 2018 года. доступно и работает, если у вас установлена ​​последняя версия matplotlib.

...