2014-07-09 14 views
8

Desidero stampare un grafico radar con più scale su più assi utilizzando matplotlib. The official API example fornisce una sola scala su un asse. (Le bilance sono 0.2.0.4.0.6.0.8 in questo esempio)Grafico radar con più scale su più assi

Voglio scale diverse su tutti gli assi. (Nell'esempio fornito ci sono 9 assi.)

Ho trovato un esempio di ciò che sto cercando per here. Ci sono 5 assi su questo esempio e 5 scale su tutti gli assi proprio come voglio.

risposta

13

Penso che si può tracciare questo con più assi, le linee sono nella prima ascia, e gli altri assi mostra solo ticklabels.

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

Fatti alcuni piccoli cambiamenti, e funziona perfettamente ora .. – Sait

+0

sto ottenendo questo errore - " 'angoli' nome globale non è definito". Potresti aggiungere quali sono le modifiche che hai fatto. – Bharathi

+0

@Bharathi, bug corretto. – HYRY

Problemi correlati