【100天精通Python】Day70:Python可视化_绘制不同类型的雷达图,示例+代码
目录
0 雷达图概述
雷达图(Radar Chart),也被称为蜘蛛图(Spider Chart)或星型图,是一种用于可视化多维数据的图表类型。雷达图通常由一个多边形或星形的图形构成,每个顶点代表数据的不同维度,而多边形的边缘表示数据的数值。每个维度通常位于雷达图的边缘,而数据值沿着半径方向绘制。
以下是雷达图的一般特点和用途:
特点:
多维度表示:雷达图允许同时表示多个维度的数据,每个维度对应于雷达图的一个轴。这使得用户可以直观地比较不同维度的数据。
相对比例:数据通常以相对比例的方式表示,因此用户可以看到各维度之间的相对关系。这使得雷达图在比较不同数据集的相对强度时非常有用。
多数据集对比:雷达图适用于比较多个数据集之间的差异。通过在同一个雷达图上绘制多个多边形,用户可以清晰地看到不同数据集的表现。
用途:
绩效评估:雷达图常用于评估个体或团队在多个维度上的绩效。例如,可以使用雷达图来评估一名运动员在速度、力量、灵活性等维度上的表现。
决策支持:在决策过程中,雷达图可以帮助决策者比较不同选项在多个关键因素上的优劣。这有助于做出综合决策。
产品特性对比:在产品设计和开发中,雷达图可以用来比较不同产品特性在用户需求、成本、复杂性等方面的差异。
风险分析:雷达图可用于分析风险因素在不同维度上的潜在影响。这对于制定风险管理策略很有帮助。
总之,雷达图是一种多维数据可视化工具,它可以帮助用户更好地理解和比较数据的多个方面,从而支持决策和分析。
1. 基本雷达图
基本雷达图用于可视化多个维度的数据。这种图通常具有一个中心点,每个维度的数据以线条或面积表示。基本雷达图用于可视化单个数据集的不同类别或维度。
import matplotlib.pyplot as pltimport numpy as np# 数据准备categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']values = [4, 2, 5, 1, 3]# 标准化数据normalized_values = [x / max(values) for x in values]# 创建雷达图angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()normalized_values += normalized_values[:1]angles += angles[:1]# 绘制雷达图fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})ax.fill(angles, normalized_values, 'b', alpha=0.1)# 设置轴标签ax.set_xticks(angles[:-1])ax.set_xticklabels(categories)# 添加标题plt.title("Filled Radar Chart")plt.show()
在此示例中,我们首先准备了数据并对其进行了标准化。然后,我们创建了雷达图,并使用
fill
函数填充了雷达图中的区域,以强调每个维度的值。最后,我们添加了轴标签和标题,以提高图表的可读性。
2. 多组数据的雷达图
这个示例展示如何绘制多组数据的雷达图,以便比较它们。
import matplotlib.pyplot as pltimport numpy as npcategories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']values1 = [4, 2, 5, 1, 3]values2 = [3, 4, 2, 3, 5]angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist()values1 += values1[:1]values2 += values2[:1]angles += angles[:1]fig, ax = plt.subplots(subplot_kw={'projection': 'polar'})ax.fill(angles, values1, 'b', alpha=0.1, label='Dataset 1')ax.fill(angles, values2, 'r', alpha=0.1, label='Dataset 2')ax.set_xticks(angles[:-1])ax.set_xticklabels(categories)ax.legend()plt.show()
3 交互式雷达地图
交互式雷达地图允许用户与地图进行互动,例如缩放、平移、悬停在数据点上查看详细信息等。Plotly是一个流行的Python库,用于创建交互式图表,包括雷达图。
首先,确保你已经安装了Plotly库。如果没有安装,可以使用以下命令进行安装:
pip install plotly
绘制交互式雷达地图:
import plotly.express as px# 示例数据data = { "City": ["New York", "Los Angeles", "Chicago", "Houston", "Miami"], "Temperature (°C)": [18, 24, 12, 27, 29], "Humidity (%)": [75, 62, 58, 84, 76]}# 创建交互式雷达地图fig = px.line_polar(data, r="Temperature (°C)", theta="City", line_close=True, range_r=[0, 30])fig.update_traces(fill='toself')# 添加湿度数据fig.add_trace(px.line_polar(data, r="Humidity (%)", theta="City", line_close=True, range_r=[0, 100]).data[0])# 设置布局fig.update_layout( polar=dict( radialaxis=dict( visible=True, range=[0, 100] ) ), showlegend=True)# 显示交互式雷达地图fig.show()
结果在浏览器中展示如下:
在这个示例中,我们使用
plotly.express
创建了一个交互式雷达地图。我们首先定义了示例数据,包括城市、平均气温和湿度。然后,我们使用px.line_polar
创建了一个雷达图,显示平均气温数据,同时使用px.line_polar
添加了湿度数据。最后,我们设置了布局选项,并使用fig.show()
显示交互式雷达地图。
4 动态雷达图
用于跟踪数据随时间变化的情况。每个时间点都可以表示为一个雷达图,形成时间序列。
import matplotlib.pyplot as pltimport numpy as np# 数据准备categories = ['Category 1', 'Category 2', 'Category 3', 'Category 4', 'Category 5']time_points = ['Time 1', 'Time 2', 'Time 3', 'Time 4', 'Time 5']# 模拟不同时间点的数据,确保每个时间点的数据长度相同data = np.random.randint(1, 10, size=(len(time_points), len(categories)))# 创建雷达图fig, axs = plt.subplots(1, len(time_points), subplot_kw={'projection': 'polar'}, figsize=(12, 4))for i, ax in enumerate(axs): values = data[i] angles = np.linspace(0, 2 * np.pi, len(categories), endpoint=False).tolist() values = np.append(values, values[0]) # 为了保证维度一致,添加一个起始点 angles = np.append(angles, angles[0]) # 添加一个起始角度 ax.fill(angles, values, 'b', alpha=0.1) ax.set_xticks(angles[:-1]) ax.set_xticklabels(categories) ax.set_title(time_points[i])plt.tight_layout()plt.show()
在此示例中,我们创建了一个包含不同时间点数据的雷达图时间序列。每个时间点的数据以不同的颜色表示,并排列在一个图表中,以显示数据随时间的变化。这是一个简单的静态示例,你可以使用动画库或交互式可视化工具库来创建动态雷达图,以更好地表示数据的时间演变。
来源地址:https://blog.csdn.net/qq_35831906/article/details/133822024
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341