Matplotlib: добавление отступов/смещение в поляризационные метки

Есть ли способ увеличить заполнение/смещение меток ярлыка полярного графика (тета)?

import matplotlib
import numpy as np
from matplotlib.pyplot import figure, show, grid

# make a square figure
fig = figure(figsize=(2, 2))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')
ax.set_yticklabels([])

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)
show()

Я бы хотел, чтобы метки тета-тика были подальше от полярного сюжета, чтобы они не перекрывались.

enter image description here

Ответ 1

Прежде всего; видя, что вы указали, что figsize, равный (2,2) и имеющий ax, занимают 80% от ширины и высоты, у вас осталось очень мало места для прокладки меток. Это может привести к тому, что метки метки будут "обрезаны" на рисунке egdes. Это можно легко зафиксировать либо с помощью

  • Указание большего размера figsize
  • Сделать ax занимать меньше места на фигуре (2,2)
  • Используйте более мелкие шрифты для метки метки

или любую их комбинацию. Другое, на мой взгляд, лучшее решение этой "проблемы" заключается в использовании подзадачи, а не в определении границ Axes;

ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c')

поскольку это позволяет использовать метод tight_layout(), который автоматически настраивает макет фигуры, чтобы хорошо включать все элементы.

Тогда к реальной проблеме; прокладка. На PolarAxes вы можете установить, помимо прочего, радиальное размещение тета-клещей. Это делается путем указания доли радиуса полярных осей, где вы хотите, чтобы метки метки были помещены в качестве аргумента в параметр frac параметра PolarAxes set_thetagrids(). Аргумент должен быть частью радиуса осей, где вы хотите разместить метки. То есть для frac 1 метки будут помещены внутри осей, а для frac > 1 они будут размещены вне осей.

Тогда ваш код может выглядеть примерно так:

import numpy as np
from matplotlib.pyplot import figure, show, grid, tight_layout
# make a square figure
fig = figure(figsize=(2, 2))
ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c')
ax.set_yticklabels([])

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)

# tick locations
thetaticks = np.arange(0,360,45)

# set ticklabels location at 1.3 times the axes' radius
ax.set_thetagrids(thetaticks, frac=1.3)

tight_layout()

show()

PolarAxes with frac=1.3

Вы должны попробовать разные значения для frac, чтобы найти значение, которое наилучшим образом подходит для ваших нужд.

Если вы не укажете значение параметра frac, как указано выше, то есть frac имеет значение по умолчанию None, код выводит график, как показано ниже. Обратите внимание на то, как радиус графика больше, так как метки не занимают столько места, сколько в приведенном выше примере.

PolarAxes with frac=None