1. 绘制箱型图
首先,确定你的数据是什么结构!!是一行有很多数据用逗号隔开,还是一行一个数据
不弄清楚你的数据存储结构就无法正确写出程序。通常会出现ax.boxplot()的维度错误
在本例中,有三个json文件,格式均如下:(一行一个数据)
....
68.25
65.0
64.5
54.5
83.75
54.5
80.67
78.0
63.0
53.5
....
分别画出这三组数据的箱型图:
import json
import matplotlib.pyplot as plt
# 读取json文件中的数据
with open('../data_path/CelebA.json', 'r') as f:
data1 = [float(x.strip()) for x in f.readlines()]
with open('../data_path/AAF.json', 'r') as f:
data2 = [float(x.strip()) for x in f.readlines()]
with open('../data_path/LaPa.json', 'r') as f:
data3 = [float(x.strip()) for x in f.readlines()]
# 绘制三个箱型图
fig, ax = plt.subplots()
ax.boxplot([data1, data2, data3], showfliers=False, showmeans=True)
ax.set_xticklabels(['CelebA', 'AAF', 'LaPa'])
#ax.set_xlabel('Data Set') # 横坐标介绍,在label下面。。弄上去不大好看
ax.set_ylabel('Eye Height')
ax.set_title('Boxplot of Target Altitude')
plt.savefig('Boxplot of 22222 Target Altitude.jpg')
注意点:
1. json文件里不能包含空值(不能含有空白的回车)!!!!必须全部都是数字!!
2. 虽然保存眼部高度的时候在json是一行一个数据,但到这边用的时候不能一行一个,必须要变成多个数据在一行的情况,比如[2,3,55,66] 所以,使用f.readlines()方法读取文件的每一行数据,strip()方法去除每行数据的换行符,并转换为float类型的数值
如果不按照2的要求先对原始数据进行处理就会报ax.boxplot()的维度错。所以一定要注意你原始文件的格式是怎么回事。
总之,最后效果:
2. 分析箱型图
箱形图是一种用作显示一组数据分散情况的统计图,因型状如箱子而得名。箱图最大的优点就是不受异常值的影响,可以以一种相对稳定的方式描述数据的离散分布情况。在箱型图中,一组数据按照从小到大顺序排列后,把该组数据四等分的数,称为四分位数。箱子的上下限,分别是数据的上四分位数和下四分位数。这意味着箱子包含了50%的数据。因此,箱子的宽度在一定程度上反映了数据的波动程度,箱体越扁说明数据越集中,换句话说,当箱型图很短时,意味着很多数据多集中分布在很小的范围内。