箱型图或盒图:从文件获取数据,使用两种方法画箱线图
代码如下:
<注,提取文件数据时,文件地址与文件要对应上>
# 箱型图或盒图:从文件获取数据,使用两种方法话箱线图
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
# ==========提取文件数据=============
datafile = 'D:\\python\\__self projects__\\basic projects\\_01_Drawing\\matplotlib\\file\\datingTestSet2.txt' # txt文件位置
data = pd.read_csv(datafile, sep='\t')
'''
# 方法一:matplotlib画图
def Group(data): # 筛选文件数据
temp = []
group = data.感兴趣程度.unique() # 得到group为[3,2,1]
for g in group: # 将按照感兴趣等级,提取飞行里程数据到数组temp
d = data.飞行里程[data.感兴趣程度 == g]
temp.append(d)
return temp
def Xticks(data): # 给各箱线图添加数据标签
for i in range(len(Group(data))):
mx = int(Group(data)[i].describe()['max'])
mi = int(Group(data)[i].describe()['min'])
q1 = int(Group(data)[i].describe()['25%'])
q2 = int(Group(data)[i].describe()['50%'])
q3 = int(Group(data)[i].describe()['75%'])
up = int(q3+1.5*(q3-q1))
down = int(q1 - 1.5 * (q3 - q1))
xtext = [mi, down, q1, q2, q3, up]
for j in xtext:
# plt.text(x, y, string, weight="bold", color="b")
plt.text(j-500, i+1.25, j, fontsize=11.1)
# ============绘制箱线图=============
box1, box2, box3 = Group(data)[0], Group(data)[1], Group(data)[2]
plt.figure(figsize=(12, 7))
plt.boxplot((box1, box2, box3), vert=False, showmeans=False)
# ============设置箱线图参数=============
plt.ylabel("好感程度", fontsize=16.0) # y坐标标签
plt.title("飞行里程", fontsize=20.0) # 图标题
# plt.yticks(fontsize=15.0)
plt.xticks(np.arange(0, 100000, step=8000))
Xticks(data)
plt.show()
'''
# 方法二:使用seaborn库
plt.figure(figsize=(15, 7))
sns.boxplot('飞行里程', '感兴趣程度', data=data, orient='h')
plt.ylabel('好感程度', fontsize=20.0)
plt.xlabel('飞行里程', fontsize=20.0)
plt.yticks(fontsize=15.0)
plt.grid(axis='x', linestyle=':')
plt.show()