Проблема с полярной диаграммой в Python, углы не учитываются - PullRequest
0 голосов
/ 10 октября 2018

У меня возникли проблемы с диаграммой полярности, над которой я работаю.Рисунок, который я должен получить, представляет собой восьмерку (некоторые мои друзья нанесли на карту данные в Origin и Excel, и это работает), но похоже, что код написан неправильно.Глядя на рисунок, я вижу, что код не учитывает углы, которые я пишу (тэта-массив), но я не знаю, почему это происходит.Я уже пробовал еще несколько кодов и записывал углы в радианах, но, похоже, ничего не работает.

import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import matplotlib.pyplot as plt
from pylab import *
import numpy as np

r = np.array([11.7,12.1,10.1,6.6,3.1,1.5,2.3,5.2,
8.7,11.5,12,10.1,6.6,3.3,1.5,2.3,5.3,9.2,11.9])

theta =np.array([0,20,40,60,80,100,120,140,160,180,
200,220,240,260,280,300,320,340,360])

ax = plt.subplot(111, projection='polar')
ax.plot(theta,r)
ax.set_rmax(13)
ax.set_rticks([2,4,6,8,10,12])  # less radial ticks
ax.set_rlabel_position(-40)  # get radial labels away from plotted line
ax.grid(True)

ax.set_title("A line plot on a polar axis", va='bottom')
plt.show()

Я также пробовал это:

r3 = np.array([11.7,12.1,10.1,6.6,3.1,1.5,2.3,5.2,
8.7,11.5,12,10.1,6.6,3.3,1.5,2.3,5.3,9.2,11.9])

theta3 =np.array([0,20,40,60,80,100,120,140,160,180,
200,220,240,260,280,300,320,340,360])



fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')
c = ax.scatter(theta3, r3)

1 Ответ

0 голосов
/ 10 октября 2018

Противоинтуитивно, в то время как полярный график показывает свою тета-ось в градусах, он фактически ожидает, что координаты будут в радианах:

import numpy as np
import matplotlib.pyplot as plt

r = np.array([11.7,12.1,10.1,6.6,3.1,1.5,2.3,5.2,
              8.7,11.5,12,10.1,6.6,3.3,1.5,2.3,5.3,9.2,11.9])

theta =np.array([0,20,40,60,80,100,120,140,160,180,
                 200,220,240,260,280,300,320,340,360], dtype=float) # making sure it is float
# convert to radians
# theta *= np.pi/180.
theta = np.deg2rad(theta)

ax = plt.subplot(111, projection='polar')
ax.plot(theta,r)
ax.grid(True)

ax.set_title("A line plot on a polar axis", va='bottom')
plt.show()

enter image description here

Мне не удалось найти какое-либо место в документации, где это явно указано (только примеры, где это сделано правильно).

Странные картинки, которые вы получили, были получены из-за того, что все значения выше 2piсложить обратно в диапазон 0 ... 2pi.Например, 20 % 2pi = 1.15, что составляет около 65 градусов при преобразовании, и именно здесь второе значение фактически находится на вашем графике.

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