2014-07-09 18 views
8

Tôi muốn vẽ biểu đồ radar với nhiều tỷ lệ trên nhiều trục sử dụng matplotlib. The official API example chỉ cho một tỷ lệ trên một trục. (Quy mô là 0,2,0,4,0,6,0,8 trong ví dụ này)Biểu đồ radar có nhiều vảy trên nhiều trục

Tôi muốn các thang đo khác nhau trên tất cả các trục. (Có 9 trục trong ví dụ đã cho.)

Tôi đã tìm thấy ví dụ về những gì tôi đang tìm kiếm here. Có 5 trục trên ví dụ này và 5 vảy trên tất cả các trục giống như tôi muốn.

Trả lời

13

Tôi nghĩ bạn có thể vẽ đồ thị này bằng nhiều trục, các đường nằm trong rìu đầu tiên và các trục khác chỉ hiển thị các dấu 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

Thực hiện một số thay đổi nhỏ, và hoạt động hoàn hảo bây giờ .. – Sait

+0

Tôi nhận được lỗi này - "tên toàn cầu 'góc' không được định nghĩa". Bạn có thể vui lòng thêm những thay đổi bạn đã làm. – Bharathi

+0

@Bharathi, lỗi đã được sửa. – HYRY

Các vấn đề liên quan