Prima di tutto; visto che come hai specificato che lo figsize
è (2,2) e che l'ax
occupa l'80% sia della larghezza che dell'altezza, hai molto poco spazio rimasto per riempire i ticklabels. Questo potrebbe far sì che i ticklabels siano "tagliati" agli ego della figura. Questo può facilmente essere "fisso" di entrambi i
- Specificando più grande
figsize
- Fai il
ax
occupano meno spazio sul (2,2) figura dimensioni
- Usa Caratteri più piccoli per i ticklabels
o qualsiasi combinazione di questi. Un altro, a mio avviso migliore, la soluzione a questo "problema" consiste nell'utilizzare una sottotrama piuttosto che specificare i limiti dello Axes
;
ax = fig.add_subplot(111, polar=True, axisbg='#d5de9c')
quanto ciò rende possibile utilizzare il metodo tight_layout()
che configura automaticamente il layout figura ben per includere tutti gli elementi.
Quindi al problema reale a portata di mano; l'imbottitura. Su un PolarAxes
è possibile impostare, tra le altre cose, il posizionamento radiale dei teta-tick. Questo viene fatto specificando la frazione del raggio degli assi polari in cui si desidera posizionare i segni di spunta come argomento per il parametro frac
del metodo set_thetagrids()
PolarAxes
. L'argomento dovrebbe essere una frazione del raggio degli assi in cui si desidera posizionare i ticklabels. Cioè per frac
< 1 i ticklabels verranno posizionati all'interno degli assi, mentre per frac
> 1 verranno posizionati all'esterno degli assi.
Il vostro codice potrebbe quindi essere qualcosa di simile:
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()

Si dovrebbe provare diversi valori per frac
per trovare un valore che è più adatto per le vostre esigenze.
Se non si specifica un valore per il parametro frac
come sopra, ad esempio frac
ha il valore predefinito None
, il codice genera un grafico come riportato di seguito. Nota come il raggio della trama è più grande, in quanto i ticklabels non "occupano tanto spazio" come nell'esempio sopra.

wow, una spiegazione sorprendente! grazie mille! – dimka
Sai cos'è il 'frac' predefinito? – Annan
@Annan Da [questo] (https://github.com/matplotlib/matplotlib/blob/ff31d67a8103620221a3eeadeb985e8268a7d934/doc/users/whats_new.rst#enhancements-to-polar-plot) sembra che 'frac' sia deprecato. "[...] Di conseguenza, l'argomento' frac' su .PolarAxes.set_thetagrids non viene più applicato. Il riempimento del segno di spunta può essere modificato con l'argomento 'pad' su .Axes.tick_params o .Axis.set_tick_params." – hooy