seaborn绘制雷达图
时间: 2023-10-04 19:05:57 浏览: 270
Seaborn没有原生支持雷达图的函数,但可以使用Matplotlib的radar chart创建雷达图,并使用Seaborn修饰图形。
以下是一个简单的示例,展示了如何使用Seaborn和Matplotlib创建雷达图。
首先,我们需要导入必要的库和数据:
```python
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# 创建数据
df = pd.DataFrame({
'group': ['A','B','C','D'],
'var1': [38, 1.5, 30, 4],
'var2': [29, 10, 9, 34],
'var3': [8, 39, 23, 24],
'var4': [7, 31, 33, 14],
'var5': [28, 15, 32, 14]
})
```
然后,我们需要计算每个组的角度和值。这可以使用以下代码完成:
```python
# 计算角度
angles = [n / float(len(df.columns[1:])) * 2 * pi for n in range(len(df.columns[1:]))]
angles += angles[:1]
# 创建子图
ax = plt.subplot(111, polar=True)
# 添加第一个折线图
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Group A")
# 添加第二个折线图
values = df.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Group B")
# 填充颜色
ax.fill(angles, values, 'b', alpha=0.1)
# 添加标签
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
ax.set_thetagrids([i * 360 / len(df.columns[1:]) for i in range(len(df.columns[1:]))], df.columns[1:])
ax.set_rlabel_position(0)
plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)
plt.ylim(0,40)
# 添加标题
plt.title("Radar Chart", size=11, y=1.1)
```
最后,我们可以使用Seaborn修饰图形:
```python
# 使用Seaborn修饰图形
sns.set_style("whitegrid")
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
plt.show()
```
完整的代码如下所示:
```python
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from math import pi
# 创建数据
df = pd.DataFrame({
'group': ['A','B','C','D'],
'var1': [38, 1.5, 30, 4],
'var2': [29, 10, 9, 34],
'var3': [8, 39, 23, 24],
'var4': [7, 31, 33, 14],
'var5': [28, 15, 32, 14]
})
# 计算角度
angles = [n / float(len(df.columns[1:])) * 2 * pi for n in range(len(df.columns[1:]))]
angles += angles[:1]
# 创建子图
ax = plt.subplot(111, polar=True)
# 添加第一个折线图
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Group A")
# 添加第二个折线图
values = df.loc[1].drop('group').values.flatten().tolist()
values += values[:1]
ax.plot(angles, values, linewidth=1, linestyle='solid', label="Group B")
# 填充颜色
ax.fill(angles, values, 'b', alpha=0.1)
# 添加标签
ax.set_theta_offset(pi / 2)
ax.set_theta_direction(-1)
ax.set_thetagrids([i * 360 / len(df.columns[1:]) for i in range(len(df.columns[1:]))], df.columns[1:])
ax.set_rlabel_position(0)
plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)
plt.ylim(0,40)
# 添加标题
plt.title("Radar Chart", size=11, y=1.1)
# 使用Seaborn修饰图形
sns.set_style("whitegrid")
plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
plt.show()
```
阅读全文