Полярное построение Matplotlib: отображение полярных отметок в градусах в десятичном формате - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь пометить метки на графике полярного сектора в Matplotlib в градусах в соответствии с указанным форматом (т. Е. С плавающей точкой с двумя десятичными знаками), но выполняю обаэто явно не поддерживается.

Я могу пометить отметки как градусы или с указанными десятичными знаками, но не обоими.Обратите внимание, что Matplotlib по умолчанию принимает отметки в градусах:

Но после того, как я применил формат к отметкам, используя ax.xaxis.set_major_formatter(), вместо этого отображаются радианы: enter image description here

Как применить формат градуса, указав при этом десятичный формат?

Примечание. Преобразование меток в градусы (например, numpy.rad2deg) не работает, поскольку ax.set_xticks()интерпретирует аргумент только как радианы (и все же Matplotlib по умолчанию отображает их как градусы ...)

Пример кода:

import numpy as np
import matplotlib.pyplot as plt

from matplotlib.ticker import FormatStrFormatter

minTheta = 0.42; maxTheta = 0.55

fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')

#create four tick labels (in radians) dynamically based on the theta range
ticks = np.linspace(minTheta, maxTheta, 4)

ax.set_xticks(ticks)

#disable or enable the following line to change the tick display format*************
ax.xaxis.set_major_formatter(FormatStrFormatter('%.2f'))

#Adjust the sector window: you must call these AFTER setting the ticks, since setting the ticks
#actually adjusts the theta range window. This must be in degrees.
ax.set_thetamin(np.rad2deg(minTheta))
ax.set_thetamax(np.rad2deg(maxTheta))

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Кроме того, вы можете использовать PercentFormatter.Здесь xmax - это значение, которое соответствует 100%.В соответствии с вашим переводом в проценты, 100% будет соответствовать радиану np.pi*100/180.

. Я выделяю три добавленные строки кода комментарием #

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter # <---


minTheta = 0.42; maxTheta = 0.55

fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')

ticks = np.linspace(minTheta, maxTheta, 4)
ax.set_xticks(ticks)

ax.set_thetamin(np.rad2deg(minTheta))
ax.set_thetamax(np.rad2deg(maxTheta))

xmax = np.pi*100/180 # <---
ax.xaxis.set_major_formatter(PercentFormatter(xmax, decimals=2)) # <---

enter image description here

0 голосов
/ 14 февраля 2019

Внутренними единицами полярного графика являются радианты.Положение тиков, следовательно, дается в радиантах, и это числа, которые вам нужно отформатировать.Вы можете сделать это, используя FuncFormatter.

rad2fmt = lambda x,pos : f"{np.rad2deg(x):.2f}°"
ax.xaxis.set_major_formatter(FuncFormatter(rad2fmt))

Полный пример будет выглядеть так:

import numpy as np
import matplotlib.pyplot as plt

from matplotlib.ticker import FuncFormatter

minTheta = 0.42; maxTheta = 0.55

fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')

#create four tick labels (in radians) dynamically based on the theta range
ticks = np.linspace(minTheta, maxTheta, 4)
ax.set_xticks(ticks)

#disable or enable the following line to change the tick display format*
rad2fmt = lambda x,pos : f"{np.rad2deg(x):.2f}°"
ax.xaxis.set_major_formatter(FuncFormatter(rad2fmt))

#Adjust the sector window: you must call these AFTER setting the ticks, since setting the ticks
#actually adjusts the theta range window. And it must be in degrees.
ax.set_thetamin(np.rad2deg(minTheta))
ax.set_thetamax(np.rad2deg(maxTheta))

plt.show()

enter image description here

...