Изменение параметров оси для полярных графиков в Matplotlib / Python - PullRequest
5 голосов
/ 10 февраля 2012

У меня проблема с изменением меток моей оси в Matplotlib.Я хочу изменить параметры радиальной оси в моем полярном графике.

По сути, я вычисляю искажение цилиндра, которое является ничем иным, как отклонением радиуса от исходного (идеально круглого) цилиндра.Некоторые из значений искажения являются отрицательными, в то время как некоторые являются положительными из-за растягивающих и сжимающих сил.Я ищу способ изобразить это в цилиндрических координатах графически, поэтому я подумал, что полярный график - моя лучшая ставка.В Excel есть опция «Радарная карта», которая достаточно гибкая, чтобы указывать минимальные и максимальные значения радиальной оси.Я хочу повторить это на Python, используя Matplotlib.

Мой скрипт Python для построения графиков на полярных координатах выглядит следующим образом.

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]

fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_rmax(1)
ax1.plot(theta,R1,lw=2.5)

Мой график выглядит следующим образом: bad

Но я не хочу это представлять.Я хочу изменять свою радиальную ось, так что я могу показать данные как отклонение от некоторого эталонного значения, скажем, -2.Как попросить Matplotlib в полярных координатах изменить метку минимальной оси?Я могу сделать это очень легко в Excel.Я выбираю минимальное радиальное значение -2, чтобы получить следующую радиолокационную карту Excel:
excelplot

В Python я могу легко сместить свои входные данные на величину 2. Мой новый набор данныхназывается R2, ​​как показано:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R2 = [1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,\
1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642,\
1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642]

fig2 = plt.figure()
ax2 = fig2.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax2.plot(theta,R2,lw=2.5) 
ax2.set_rmax(1.5*offset)
plt.show()

Сюжет показан ниже: good

Как только я получу это, я могу вручную добавить метки осей и жестко закодировать их в свой скрипт.Но это действительно безобразный способ.Можно ли каким-либо образом получить эквивалент Matplotlib для радиолокационной карты Excel и изменить метки осей без необходимости манипулировать входными данными?

1 Ответ

8 голосов
/ 10 февраля 2012

Вы можете просто использовать обычный способ установки пределов оси:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]

fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_ylim(-2,2)
ax1.set_yticks(np.arange(-2,2,0.5))
ax1.plot(theta,R1,lw=2.5)
...