【python】盒图的制作

盒图效果图

在这里插入图片描述
这是使用python制作的盒图,在同一个坐标轴中展现10个盒图。盒图能够很好地显示数据的离散的分布情况。除了图片展示,python还能够计算出每个盒图的相关数据,比如目标数据的平均值、最大值、最小值等,例如(以上盒图对应的部分数据):

          index1      index2      index3     
count  842.000000  842.000000  842.000000    
mean     9.284371    9.044644    8.989394   
std      0.240151    0.261572    0.267525   
min      7.880000    7.800000    7.300000   
25%      9.162500    8.900000    8.840000   
50%      9.320000    9.070000    9.020000    
75%      9.440000    9.217500    9.160000       
max      9.800000    9.760000    9.730000    

代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import xlrd

#保存数据,可用于之后的学习研究
def save_data(data, path):
    Note=open(path,mode='w')
    print("保存数据")
    Note.write(str(data))
    Note.close()

#读取xls文件数据
def read_excel(excel_name,sheet_name):
    """参数:
    输入:excel的名字
    输出:目标表的名字"""
    workbook = xlrd.open_workbook(excel_name)  #打开文件
    sheet = workbook.sheet_by_name(sheet_name)  #读取sheet页
    # 获取表的行列数
    rows = sheet.nrows
    cols = sheet.ncols
    all_data = []
    tempList = []
    # 读取放置在excel中的数据
    for col in range(3, 13):
        for row in range(1, rows):
            print(rows)
            tempList.append(sheet.cell(row, col).value)
        all_data.append(tempList)
        tempList = []
    return all_data

#设置盒图的图片参数
def draw_box(all_data):
    for i in range(1):
        db = np.array(all_data)  # 把数据放置到numpy中的数组中
        print(db)
        fig = plt.figure(figsize=(40, 15))  # 设置画布大小
        ax = fig.add_subplot(111)  # 图形在画布中的布局
        allg = ["index1", "index2", "index3", "index4", "index5", "index6", "index7", "index8", "index9","index10"]  # 设置横坐标
        df = pd.DataFrame(db.T, columns=allg)  # db.T表示转置
        ax.set_title("Box-and-Whisker Plots", fontsize=24)  # 以下表示设置坐标标签以及字体大小
        ax.set_xlabel('index', fontsize=22)
        ax.set_ylabel('grade', fontsize=22)
        df.boxplot(ax=ax, fontsize=24)
        plt.savefig("盒图4.jpg")  # 保存
        plt.show()
        pd.set_option('display.max_columns', None)  # 为了将数据全部展示,显示全部列
        data = df.describe()  # 计算相关指标
        print(data)
        save_data(data, "数据.txt")  # 用于存储各组数据的指标数据


if __name__ == '__main__':
    all_data = read_excel("参数1", "参数2")#读取数据,参数1是excel的名字,参数2是里面具体的表名
    draw_box(all_data)#绘制图表

使用方法

数据

本代码使用的数据是以列为单位,即每一列数据对应着一个盒图。
在读取表格数据时的read_excel()函数中的for循环中:

for col in range(3, 13):
        for row in range(1, rows):

(excel表格中的第一列的下标从0开始),大家可以根据自己的需要修改。

图表

allg = ["index1", "index2", "index3", "index4", "index5", "index6", "index7", "index8", "index9","index10"]  # 设置横坐标

allg设置了横坐标,可根据自己的实际数据修改

以下是本人的git地址,欢迎大家免费下载,交流学习:

https://github.com/HYHJessica/

猜你喜欢

转载自blog.csdn.net/CBCY_csdn/article/details/125697843