如何在一个图中显示具有不同缩放轴的多个雷达图?(How do I display multiple radar charts with differently scaled axes each in

编程入门 行业动态 更新时间:2024-10-23 23:20:20
如何在一个图中显示具有不同缩放轴的多个雷达图?(How do I display multiple radar charts with differently scaled axes each in one figure?)

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

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

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)

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

import matplotlib.pyplot as plt import numpy as np from matplotlib.pyplot import Line2D fig1 = plt.figure(figsize=(9, 9)) plt.ioff() ############################# # first radar chart ############################# titles = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] 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(fig1, titles, labels1, (0, upper_bound), lines1) plt1 = radar1.plot(values, "-", lw=2, color="b", alpha=0.4, label="Fitness") # type: List[Line2D] ############################# # second radar chart ############################# fig2 = plt.figure(figsize=(9, 9)) 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(fig2, titles, labels2, (0, 1), lines2) 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") ############################# # combine radar charts ############################# fig3, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=dict(projection='polar'), figsize=(25, 15)) line1, = ax1.plot(plt1[0].get_xdata(), plt1[0].get_ydata(), 'g-', label="Fitness") line2, = ax2.plot(plt2[0].get_xdata(), plt2[0].get_ydata(), 'b-', label="Values") line3, = ax2.plot(plt3[0].get_xdata(), plt3[0].get_ydata(), 'r-', label="Critical Thresholds") ax1.set_ylim(0, 80) ax2.set_ylim(0, 1) plt.tight_layout() plt.show() plt.close()

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

如何添加缺少的标签?

I am trying to display two polar plots in one window using matplotlib. This is realized using subplots. Each subplot is created using this solution. The two diagrams are then combined using this solution:

The Radar class handles the creation of a single radar chart:

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)

The following code is used in order to create two radar charts and add them to one figure:

import matplotlib.pyplot as plt import numpy as np from matplotlib.pyplot import Line2D fig1 = plt.figure(figsize=(9, 9)) plt.ioff() ############################# # first radar chart ############################# titles = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] 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(fig1, titles, labels1, (0, upper_bound), lines1) plt1 = radar1.plot(values, "-", lw=2, color="b", alpha=0.4, label="Fitness") # type: List[Line2D] ############################# # second radar chart ############################# fig2 = plt.figure(figsize=(9, 9)) 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(fig2, titles, labels2, (0, 1), lines2) 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") ############################# # combine radar charts ############################# fig3, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=dict(projection='polar'), figsize=(25, 15)) line1, = ax1.plot(plt1[0].get_xdata(), plt1[0].get_ydata(), 'g-', label="Fitness") line2, = ax2.plot(plt2[0].get_xdata(), plt2[0].get_ydata(), 'b-', label="Values") line3, = ax2.plot(plt3[0].get_xdata(), plt3[0].get_ydata(), 'r-', label="Critical Thresholds") ax1.set_ylim(0, 80) ax2.set_ylim(0, 1) plt.tight_layout() plt.show() plt.close()

After combining the two figures, the labels with the different scales are gone (figures 1 and 2 are the desired result, while the combined figure 3 is missing some lables)

How do I add the missing labels?

最满意答案

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

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

在此处输入图像描述

You need to actually use the radar class if you want to benefit from its features.

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

更多推荐

本文发布于:2023-08-06 07:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1446100.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   缩放   图中   如何在   display

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!