今天带来关于雷达图与箱型图的示例
1.雷达图
雷达图是一种显示多变量数据的图形方法。通常从同一中心点开始等角度间隔地射出三个以上的轴,每个轴代表一个定量变量,各轴上的点依次连接成线或几何图形。
雷达图可以用来在变量间进行对比,或者查看变量中有没有异常值。另外,多幅雷达图之间或者雷达图的多层数据线之间,还可以进行总体数值情况的对比。
以下展示一个最基础的雷达图
import matplotlib.pyplot as plt
from math import pi
# 数据
labels = ['专业知识', '社交能力', '领导能力', '自我管理', '学习能力']
data = [38, 29, 15, 35, 32]
# 闭合图形
data += data[:1]
angles = [n / 5 * 2 * pi for n in range(5)]
angles += angles[:1]
# 创建图
plt.figure(figsize=(5, 5))
ax = plt.subplot(111, polar=True)
# 画图
ax.plot(angles, data)
ax.fill(angles, data, alpha=0.1)
# 设置标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
# 显示
plt.show()
当然了,如果你想进一步定义更加复杂(或者更加美观的)雷达图,也有很多的参数提供选择,以下展示一个经过优化的雷达图
import matplotlib.pyplot as plt
import pandas as pd
from math import pi
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 使用内置风格,兼容性更好
plt.style.use('ggplot')
# 构造数据
df = pd.DataFrame({
'group': ['A', 'B', 'C', 'D'],
'专业知识': [38, 1.5, 30, 4],
'社交能力': [29, 10, 9, 34],
'领导能力': [15, 39, 23, 24],
'自我管理': [35, 31, 33, 14],
'学习能力': [32, 15, 32, 14]
})
# 类别数量
categories = list(df.columns[1:])
N = len(categories)
# 第一个人的数据
values = df.loc[0].drop('group').values.flatten().tolist()
values += values[:1]
# 每个维度的角度
angles = [n / float(N) * 2 * pi for n in range(N)]
angles += angles[:1]
# 创建图形
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
# 画线
ax.plot(angles, values, color='#005C9F', linewidth=2, linestyle='-', marker='o')
# 填充区域
ax.fill(angles, values, color='#81C3D7', alpha=0.3)
# 设置类别标签
ax.set_xticks(angles[:-1])
ax.set_xticklabels(categories, fontsize=10, color='dimgray')
# 设置极径标签
ax.set_rlabel_position(0)
ax.set_yticks([10, 20, 30])
ax.set_yticklabels(['10', '20', '30'], color='gray', fontsize=9)
ax.set_ylim(0, 40)
# 图表标题
plt.title('能力雷达图', fontsize=14, color='#333333', pad=20)
plt.tight_layout()
plt.show()
ax.plot(angles, values, color='#005C9F', linewidth=2, linestyle='-', marker='o')
-
作用:在雷达图上绘制数据线。
-
参数:
-
angles
:每个数据点的角度。 -
values
:每个数据点的值。 -
color='#005C9F'
:设置线条颜色为蓝色。 -
linewidth=2
:设置线条宽度为 2。 -
linestyle='-'
:设置线条样式为实线。 -
marker='o'
:在数据点处添加圆形标记。
-
ax.fill(angles, values, color='#81C3D7', alpha=0.3)
-
作用:填充雷达图的区域。
-
参数:
-
angles
:每个数据点的角度。 -
values
:每个数据点的值。 -
color='#81C3D7'
:填充颜色为浅蓝色。 -
alpha=0.3
:设置透明度为 0.3(填充区域半透明)。
-
2.箱型图
箱形图是一种用作显示一组数据分布情况的统计图,因型状如箱子而得名。箱子的顶端和底端,分别代表上下四分位数。箱子中间的是中位数线,它将箱子一分为二。箱形图最大的优势是,它以一种简单的方式,概括出一个或多个数值变量的分布,同时又不会占据太多空间。通过箱形图,我们可以很快知道一些关键的统计值,如中位数、上下四分位数等。
接下来先绘制一个最为简单的箱型图
首先就是数据,本文用到的数据
df = pd.read_csv("trentino_temperature.csv")
# 创建一个图形和坐标轴,设置图形的大小
fig, ax = plt.subplots(figsize=(8,6))
# 创建一个箱型图,数据来自于 df['temp'],并设置自定义颜色
boxplot = ax.boxplot(df['temp'])
# 设置 x 轴和 y 轴的标签
ax.set_xlabel('列名') # x 轴标签为 '列名'
ax.set_ylabel('值') # y 轴标签为 '值'
# 设置图表标题
ax.set_title('箱型图') # 图表标题为 '箱型图'
# 显示图表
plt.show() # 显示图形
如果看懂了,那么恭喜接下来可以试试稍微复杂一点的箱线图
# 创建一个图形和坐标轴,设置图形的大小
fig, ax = plt.subplots(figsize=(8,6))
# 创建一个箱型图,数据来自于 df['temp'],并设置箱体填充颜色
boxplot = ax.boxplot(df['temp'], patch_artist=True)
# 设置自定义颜色
box_color = 'lightblue' # 箱体颜色为浅蓝色
whisker_color = 'blue' # 须(箱型图的线条)颜色为蓝色
cap_color = 'gold' # 顶部和底部线条(箱体的帽子部分)颜色为金色
flier_color = 'red' # 异常值(箱外的点)颜色为红色
median_color = 'red' # 中位数线颜色为红色
# 为箱型图的各部分设置相应的颜色
plt.setp(boxplot['boxes'], color=box_color) # 设置箱体颜色
plt.setp(boxplot['whiskers'], color=whisker_color) # 设置须颜色
plt.setp(boxplot['caps'], color=cap_color) # 设置顶部和底部线条颜色
plt.setp(boxplot['fliers'], markerfacecolor=flier_color) # 设置异常值的颜色
plt.setp(boxplot['medians'], color=median_color) # 设置中位数线颜色
# 设置 x 轴和 y 轴的标签
ax.set_xlabel('列名') # x 轴标签为 '列名'
ax.set_ylabel('值') # y 轴标签为 '值'
# 设置图表标题
ax.set_title('箱型图') # 图表标题为 '箱型图'
# 显示图表
plt.show() # 显示图形