Python 数据可视化 boxplot

Python 数据可视化 boxplot

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns


# 读取 TSV 文件
df = pd.read_csv('result.tsv', sep='\t')

normal_df = df[df["sample_name"].str.contains("normal")]
tumor_df = df[df["sample_name"].str.contains("tumor")]


# sns.boxplot(x='down_level', y='loci_median_depth', data=tumor_df)
# sns.boxplot(x='down_level', y='loci_average_depth', data=tumor_df)




def box_plot_1(df):
    # 提取数据
    sample_data = {}
    # 遍历 DataFrame,根据样本和级别组织数据
    for index, row in df.iterrows():
        sample = row['sample_name']
        level = row['down_level']
        data = row['loci_median_depth']  # 这里假设你想绘制 loci_median_depth 列的箱线图
        
        # 如果样本不在字典中,则将其添加为新的键,并将数据存储为列表
        if sample not in sample_data:
            sample_data[sample] = {}
        if level not in sample_data[sample]:
            sample_data[sample][level] = []
        sample_data[sample][level].append(data)

    # 绘制箱线图
    plt.figure(figsize=(100, 60))

    # 遍历样本和级别,绘制箱线图
    position = 1
    for sample, levels in sample_data.items():
        for level, data in levels.items():
            label = f"{sample} - {level}"
            plt.boxplot(data, positions=[position], labels=[label])
            position += 1

    plt.ylabel('Depth')
    plt.title('Box Plot of Depth Data by Sample and Level')
    plt.grid(True)
    plt.xticks(rotation=45)
    # 保存箱线图为文件
    plt.savefig('boxplot.png')
    plt.show()

def box_plot_2(df, target_header_list):
    lvl_list = ["ori", '40', '36', '32', '28', '24', '20']
    for level_to_plot in lvl_list:
        filtered_df = df[df['down_level'] == level_to_plot]
        plt.figure(figsize=(20, 15))
        # plt.boxplot(filtered_df[' loci_median_depth'])
        plt.boxplot([filtered_df[i] for i in target_header_list], labels=target_header_list)

        plt.ylabel('Depth')
        # plt.xlabel(level_to_plot)
        plt.title(f'Box Plot of Depth Data for {level_to_plot} Level')
        plt.grid(True)
        plt.xticks(rotation=45)
        # 在箱线图上绘制每个数据点
        for i, col in enumerate(target_header_list):
            x = [i + 1] * len(filtered_df[col])
            plt.plot(x, filtered_df[col], 'ro', alpha=0.5)

        # 保存箱线图为文件
        plt.savefig(f'boxplot_{level_to_plot}.png')
        # 显示箱线图
        plt.show()


def box_plot_3(df, target_header_list):
    # 选择要包含在 y 轴中的列
    y_columns = target_header_list
    # 将这些列数据整合到一个单独的 DataFrame 中
    y_data = df[y_columns]

    # 使用 pd.melt() 函数将其转换为适合绘制箱线图的格式
    melted_df = pd.melt(df, id_vars=['down_level'], value_vars=y_columns, var_name='Depth_Type', value_name='Depth')
    # 使用 seaborn 绘制箱线图
    plt.figure(figsize=(12, 8))
    sns.boxplot(x='down_level', y='Depth', hue='Depth_Type', data=melted_df, dodge=True)
    plt.xlabel('Down Level (G)')
    plt.ylabel('Depth')
    plt.title('Box Plot of Depth Data by Down Level')
    plt.legend(title='Depth Type', loc='upper right')
    plt.grid(True)

    plt.savefig(f'boxplot.png')
    print()


lvl_list = ["ori", '40', '36', '32', '28', '24', '20']

target_header_list = ["loci_median_depth", "loci_average_depth", "dedup_loci_median_depth", "dedup_loci_average_depth", "average_depth", "median_depth", "dedup_average_depth", "dedup_median_depth"]


# box_plot(tumor_df, target_header_list)
# box_plot_3(normal_df, target_header_list)
# box_plot_2(normal_df, target_header_list)
box_plot_3(normal_df, target_header_list)
# box_plot_1(normal_df)

box_plot_2

box_plot_3

参考:

https://blog.csdn.net/Artoria_QZH/article/details/102790740

R:https://www.modb.pro/db/451162

相关推荐
老白干2 小时前
jjwt 0.9.1 在 JDK 11+ 上的两个“坑”与完整解决方案
java·python·log4j
笨鸟先飞,勤能补拙9 小时前
AI 赋能网络安全:技术全景、成熟度评估与实战案例
人工智能·python·安全·web安全·网络安全·sqlite·github
长和信泰光伏储能9 小时前
京津冀光伏发电:绿色能源的未来之路
python·能源
浦信仿真大讲堂10 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study10 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境11 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境11 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd12311 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy123931021612 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb0012 小时前
一个项目带你入门AI应用开发01
python