【问题标题】:Radar chart with multiple scales on multiple axes多轴多尺度雷达图
【发布时间】:2014-07-09 16:24:06
【问题描述】:

我想使用matplotlib 在多个轴上绘制具有多个刻度的雷达图。 The official API example 在一个轴上只给出一个刻度。 (本例中比例为 0.2,0.4,0.6,0.8)

我想要所有轴上的不同比例。 (在给定的示例中有 9 个轴。)

我找到了我正在寻找的示例here。这个例子有 5 个轴,所有轴上都有 5 个刻度,就像我想要的那样。

【问题讨论】:

    标签: python matplotlib plot


    【解决方案1】:

    我认为你可以用多个轴来绘制它,线条在第一个轴上,其他轴只显示刻度标签。

    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()
    

    【讨论】:

    • 我收到此错误 - “未定义全局名称'角度'”。您能否补充一下您所做的更改。
    • @Bharathi,错误已修复。
    • 也许需要注意的是,如果你想看到上面代码的一些输出,你必须在最后添加至少 fig.savefig("somename.png")。
    • 我也遇到了一个问题,使用上面的例子,轴的度数大于 360。 IE。缺少标题“A”的虚线。我通过在“self.angles = np.arange(90, 90+360, 360.0/self.n)”之后添加一个带有“self.angles = [a % 360 for a in self.angles]”的新行来解决这个问题.环境:Python 2.7.12 :: Anaconda 4.2.0(64 位),matplotlib(1.5.3),numpy(1.11.1)。无论如何感谢你的工作;-)
    • 遇到了与@keocra 相同的问题,可能库已更新,现在行为有所不同。这是我的 12 轴雷达图的工作解决方案:gist.github.com/geberl/c65517bf8273552486f9a8954e80ddf4
    猜你喜欢
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多