【问题标题】:Radar chart not centered in matplotlib雷达图未在 matplotlib 中居中
【发布时间】:2016-12-14 16:07:04
【问题描述】:

我正在尝试了解雷达图在 matplotlib 中的工作原理。我正在使用this 线程中的代码,但我制作的图没有正确居中并且缺少轴。我已经尝试使用 matplotlib 1.3.1、1.4.1 和 1.5.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()

【问题讨论】:

    标签: python matplotlib radar-chart


    【解决方案1】:

    我遇到了同样的问题,但是我发现问题出在以下部分:

    self.angles = np.arange(90, 90+360, 360.0/self.n)

    所以改成

    self.angles = np.arange(0, 360, 360.0/self.n)

    然后用ax.set_theta_offset(np.deg2rad(90)) 旋转每个ax。

    修改后的类如下所示:

    # Python 3.4
    # matplotlib 1.5.3
    class Radar(object):
        def __init__(self, fig, titles, labels, rotation=0, rect=None):
            if rect is None:
                rect = [0.05, 0.05, 0.95, 0.95]
    
            self.n = len(titles)
            self.angles = np.arange(0, 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, 6)
                ax.set_theta_offset(np.deg2rad(rotation))
    
        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)
    

    注意:我已将参数rotation=0 添加到__init__ 并在其最后一个循环中将旋转应用于所有ax。

    我知道这个问题已经有一段时间了,但我想其他人会偶然发现这个问题。

    【讨论】:

    • 感谢您的反馈。我认为即使这是一个旧帖子,也会有人稍后出现。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多