2015-08-14 20 views
5

Przygotowuję wykres rozproszenia biegunowego dla projektu uczelnianego z matplotlib i nie mogę dowiedzieć się, jak dodać etykietę do osi promieniowej. Tu jest mój kodu (I pominięte dane ponieważ został odczytany z CSV)Dodawanie etykiety osi promieniowej w matplotlib

import matplotlib.pyplot as plt 

ax = plt.subplot(111, polar=True) 
ax.set_rmax(1) 
c = plt.scatter(theta, radii) 
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom') 
ax.legend(['Supernova']) 
plt.show() 

(Moja działka wygląda this. I nie wydaje się znaleźć żadnej bezpośredniej metody, aby to zrobić. Czy ktoś załatwiłeś to wcześniej i masz jakieś sugestie?

Odpowiedz

0

Nie znam wbudowanego sposobu, aby to zrobić, ale możesz użyć ax.text, aby utworzyć własną. Możesz uzyskać położenie etykiet radialnych odznak przy użyciu ax.get_rlabel_position(), i środkowy punkt osi promieniowej przy użyciu ax.get_rmax()/2.

Na przykład tutaj jest twój kod (z niektórych danych losowych):

import matplotlib.pyplot as plt 
import numpy as np 

theta=np.random.rand(40)*np.pi*2. 
radii=np.random.rand(40) 

ax = plt.subplot(111, polar=True) 
ax.set_rmax(1) 
c = plt.scatter(theta, radii) 
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom') 
ax.legend(['Supernova']) 

label_position=ax.get_rlabel_position() 
ax.text(np.radians(label_position+10),ax.get_rmax()/2.,'My label', 
     rotation=label_position,ha='center',va='center') 

plt.show() 

i tu jest wyjście:

enter image description here

byłbym zainteresowany, aby zobaczyć, czy istnieje bardziej eleganckie rozwiązanie, ale mam nadzieję, że to pomaga.

+0

To działało super, dzięki za odpowiedź !! –

+0

@MattT, świetnie. Jeśli ta odpowiedź pomogła, możesz ją zaakceptować (kliknij znak wyboru po lewej stronie)? – tom

0

Nieco inna metoda niż @tom. Wykorzystuje to bezpośrednio opcję plt.legend.

Przykład:

import matplotlib.pyplot as plt 
import numpy as np 

theta=np.random.rand(40)*np.pi*2. 
radii=np.random.rand(40) 

ax = plt.subplot(111, polar=True) 
ax.set_rmax(1) 
c = plt.scatter(theta, radii,label='Supernova') 
ax.set_title("Spread of Abell Cluster Supernova Events as a Function of Fractional Radius", va='bottom') 
ax.legend(loc='lower right', scatterpoints=1) 
plt.show() 

można zmienić lower right do upper right lub nawet best opuścić wyrównanie legendzie do matplotlib.

enter image description here

1
from pylab import * 

N = 150 
r = 2*rand(N) 
theta = 2*pi*rand(N) 
area = 200*r**2*rand(N) 
colors = theta 
ax = subplot(111, polar=True) 
c = scatter(theta, r, c=colors, s=area, cmap=cm.hsv) 
c.set_alpha(0.75) 
ax.set_ylabel('Radius', rotation=45, size=11) 

show() 

enter image description here