2014-07-09 15 views
8

Chcę wykreślić wykres radarowy z wieloma skalami na wielu osiach przy użyciu matplotlib. The official API example podaje tylko jedną skalę na jednej osi. (W tym przypadku skale to 0.2.0.4,0.5,6.8)Wykres radarowy z wieloma skalami na wielu osiach

Chcę różnych skal na wszystkich osiach. (W podanym przykładzie jest 9 osi.)

Znalazłem przykład tego, czego szukam here. Na tym przykładzie jest 5 osi i 5 skal na wszystkich osiach, tak jak ja chcę.

Odpowiedz

13

Myślę, że możesz drukować to z wieloma osiami, linie są w pierwszym siekierze, a inne osie pokazują tylko znaczniki.

import numpy as np 
import pylab as pl 

class Radar(object): 

    def __init__(self, fig, titles, labels, rect=None): 
     if rect is None: 
      rect = [0.05, 0.05, 0.95, 0.95] 

     self.n = len(titles) 
     self.angles = np.arange(90, 90+360, 360.0/self.n) 
     self.axes = [fig.add_axes(rect, projection="polar", label="axes%d" % i) 
         for i in range(self.n)] 

     self.ax = self.axes[0] 
     self.ax.set_thetagrids(self.angles, labels=titles, fontsize=14) 

     for ax in self.axes[1:]: 
      ax.patch.set_visible(False) 
      ax.grid("off") 
      ax.xaxis.set_visible(False) 

     for ax, angle, label in zip(self.axes, self.angles, labels): 
      ax.set_rgrids(range(1, 6), angle=angle, labels=label) 
      ax.spines["polar"].set_visible(False) 
      ax.set_ylim(0, 5) 

    def plot(self, values, *args, **kw): 
     angle = np.deg2rad(np.r_[self.angles, self.angles[0]]) 
     values = np.r_[values, values[0]] 
     self.ax.plot(angle, values, *args, **kw) 



fig = pl.figure(figsize=(6, 6)) 

titles = list("ABCDE") 

labels = [ 
    list("abcde"), list("12345"), list("uvwxy"), 
    ["one", "two", "three", "four", "five"], 
    list("jklmn") 
] 

radar = Radar(fig, titles, labels) 
radar.plot([1, 3, 2, 5, 4], "-", lw=2, color="b", alpha=0.4, label="first") 
radar.plot([2.3, 2, 3, 3, 2],"-", lw=2, color="r", alpha=0.4, label="second") 
radar.plot([3, 4, 3, 4, 2], "-", lw=2, color="g", alpha=0.4, label="third") 
radar.ax.legend() 

enter image description here

+0

Wykonane jakieś małe zmiany, a teraz działa idealnie .. – Sait

+0

ja dostaję ten błąd - „globalna nazwa«kąty»nie jest zdefiniowane”. Czy mógłbyś dodać, jakie zmiany wprowadziłeś? – Bharathi

+0

@Bharathi, naprawiono błąd. – HYRY

Powiązane problemy