如何在一个图中显示具有不同缩放轴的多个雷达图?

时间:2017-06-21 08:04:17

标签: python matplotlib radar-chart

我试图使用matplotlib在一个窗口中显示两个极坐标图。这是使用子图实现的。每个子图都是使用this解决方案创建的。然后使用this解决方案组合这两个图:

Radar类处理单个雷达图的创建:

// below labels already created in default.aspx using HTML (as seen above)
String[] arr = {"label1", "label2", "label3"}; // each item is label's id

foreach (String item in arr)
{
    Label lbl = (Label)FindControl(item);
    lbl.Text = "new text";

}

以下代码用于创建两个雷达图并将它们添加到一个图中:

class Radar:

    def __init__(self, fig, titles, labels, ylimit, lines, rect=None):

        if rect is None:
            rect = [0.2, 0.2, 0.6, 0.6]

        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(lines, angle=angle, labels=label)
        ax.spines["polar"].set_visible(False)
        ax.set_ylim(ylimit[0], ylimit[1])

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

在合并两个数字后,不同尺度的标签消失了(图1和图2是期望的结果,而图3的组合缺少一些标签)

如何添加缺少的标签?

1 个答案:

答案 0 :(得分:1)

如果您想从其功能中受益,您需要实际使用雷达类。

fig3 = plt.figure(figsize=(13, 8))

titles = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']

### first subplot:
lbl_count = 7
upper_bound = 70
values = [0, 10, 40, 30, 20, 50, 30, 40]
labels1 = np.tile(np.arange(-60 + upper_bound / lbl_count, 20, upper_bound / lbl_count), (8, 1))

lines1 = np.arange(10, upper_bound, 10)
radar1 = Radar(fig3, titles, labels1, (0, upper_bound), lines1, rect=[0.55,0.1,0.35,0.8])
plt1 = radar1.plot(values, "-", lw=2, color="b", alpha=0.4, label="Fitness") 

### second subplot:
values = [0.4, 0.7, 0.2, 0.1, 0.8, 0.3, 0.5, 0.7]
lbl_count = 5
labels2 = [list("12345"), [0.1, 0.2, 0.3, 0.4, 0.5], list("54321"), [10, 8, 6, 4, 2], list("12345"), list("12345"), list("12345"), list("12345")]

lines2 = np.arange(0.2, 1.2, 0.2)
radar2 = Radar(fig3, titles, labels2, (0, 1), lines2, rect=[0.1,0.1,0.35,0.8])
plt2 = radar2.plot(values, "-", lw=2, color="b", alpha=0.4, label="Values")
plt3 = radar2.plot([0.1, 0.2, 0.5, 0.2, 0.1, 0.7, 0.4, 0.2], "-", lw=2, color="r", alpha=0.4, label="Critical Thresholds")

plt.show()

enter image description here