python数据雷达图
时间: 2023-08-11 22:28:52 浏览: 92
在 Python 中可以使用 matplotlib 库来绘制雷达图。以下是一个简单的例子:
```python
import numpy as np
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [4, 3, 2, 5, 1]
# 计算角度
angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)
# 将第一个数据点重复以闭合图形
values = np.concatenate((values,[values[0]]))
angles = np.concatenate((angles,[angles[0]]))
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, values, 'o-', linewidth=2)
ax.fill(angles, values, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, categories)
ax.grid(True)
plt.show()
```
这个例子中,我们使用了 numpy 库来计算各个数据点的角度,然后使用 matplotlib 库来绘制雷达图。你可以根据自己的需求修改数据和参数,来绘制不同风格的雷达图。
相关问题
python雷达图详解_python绘制雷达图实例讲解
雷达图(Radar Chart),也称为蜘蛛网图(Spider Chart)或星形图(Star Chart),是一种多变量数据可视化方式,通常用于比较多个变量或维度的相对关系。
Python中使用`matplotlib`库可以绘制雷达图。下面我将为你详细讲解如何使用Python绘制雷达图。
首先,我们需要导入相关的库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
接下来,我们需要准备数据。假设我们要绘制一个学生的五项能力评估雷达图,其中包括语文、数学、英语、体育和艺术五个维度的得分:
```python
labels = np.array(['语文', '数学', '英语', '体育', '艺术'])
data = np.array([90, 80, 85, 70, 60])
```
然后,我们需要计算出每个维度在雷达图中的角度。因为雷达图是一个圆形,所以每个维度的角度应该是均分360度,即每个角度应该是`360 / 数据维度个数`。代码如下:
```python
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
```
接下来,我们需要将数据和角度转换成极坐标系下的坐标。这里我们可以使用`np.vstack()`函数将数据和第一个数据点组合起来,再使用`np.cos()`和`np.sin()`函数计算出每个数据点的坐标。代码如下:
```python
data = np.concatenate((data, [data[0]]))
coords = np.vstack((angles, data)).T
coords = np.concatenate((coords, [coords[0]]))
```
最后,我们可以使用`matplotlib`的`plot()`函数绘制出雷达图。代码如下:
```python
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.plot(angles, data, 'o-', linewidth=2)
ax.fill(coords[:, 0], coords[:, 1], alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_title('学生五项能力评估')
ax.grid(True)
```
完整的代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
labels = np.array(['语文', '数学', '英语', '体育', '艺术'])
data = np.array([90, 80, 85, 70, 60])
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data, [data[0]]))
coords = np.vstack((angles, data)).T
coords = np.concatenate((coords, [coords[0]]))
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.plot(angles, data, 'o-', linewidth=2)
ax.fill(coords[:, 0], coords[:, 1], alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
ax.set_title('学生五项能力评估')
ax.grid(True)
plt.show()
```
运行代码,我们可以看到绘制出来的雷达图:
![雷达图](https://img-blog.csdnimg.cn/20211104121534521.png)
这个雷达图表示该学生在语文、数学、英语、体育和艺术五个维度上的得分情况,可以用于对比不同学生在这五个维度上的能力。
python多级雷达图
在Python中,要创建多级雷达图(也称为层次或多维度雷达图),你可以使用`plotly`库中的`radar`功能。`plotly.express`模块下的`radar`函数非常适合这种可视化需求,尤其是当你有多个分类变量和对应的度量数据时。
以下是一个简单的例子来展示如何创建多级雷达图:
```python
import plotly.express as px
import numpy as np
# 假设我们有如下数据
categories = ['Category1', 'Category2', 'Category3', 'Category4', 'Category5']
data = {
'Level1': [10, 20, 30, 40, 50],
'Level2': [20, 30, 40, 50, 60],
'Level3': [30, 40, 50, 60, 70]
}
df = pd.DataFrame(data, index=categories)
fig = px.radar(df,
names=categories,
values=np.sum(df.values, axis=1), # 综合所有层级的数据
color_discrete_sequence=['blue'], # 设置颜色
showline=True,
showscale=False)
fig.update_layout(margin=dict(t=0, b=0, l=0, r=0)) # 清除边距
fig.show()
```
在这个例子中,`categories`是雷达图的类别,`Level1`, `Level2`, 和 `Level3` 是不同级别的数据。`np.sum(df.values, axis=1)`将每个类别的数据加总,以便在一个雷达图上显示。你可以根据实际数据调整这些部分。
如果你想要自定义雷达图的各个级别或添加更多细节,如标题、轴标签等,可以查阅Plotly官方文档中的详细说明。
阅读全文