You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于多个字典利用Seaborn绘制对比散点图

使用Seaborn绘制对比散点图分析CG重复次数

需求说明

基于两类序列数据(原始序列数据dict_1、ACGT含量一致的随机序列数据dict_2),对比猫和猎豹在不同碱基对长度(1000/2000/3000bp)下的CG重复次数:

  • x轴设为碱基对长度(每1000bp为一个维度)
  • y轴设为CG重复次数
  • 同时区分原始/随机序列、不同动物的组别,实现直观对比

现有代码问题

当前代码直接将字典传入relplot,未匹配碱基对长度维度,也未区分序列类型,无法满足多维度对比需求。

解决方案

步骤1:整理数据为长格式DataFrame

Seaborn适配长格式数据,需将两个字典转换为包含以下字段的DataFrame:

  • bp_length:碱基对长度(1000/2000/3000)
  • cg_count:CG重复次数
  • organism:动物种类(cat/cheetah)
  • seq_type:序列类型(原始序列/随机序列)

步骤2:绘制对比散点图

通过hue区分序列类型,style区分动物种类,让两类对比维度清晰呈现。

完整代码

import seaborn as sns
import pandas as pd

# 原始数据
dict_1 = {'cat': [53, 69, 0], 'cheetah': [65, 52, 28]}  # 原始序列
dict_2 = {'cat': [40, 39, 10], 'cheetah': [35, 62, 88]}  # 随机序列
bp_lengths = [1000, 2000, 3000]

# 整理数据到列表
data = []
# 添加原始序列数据
for organism, counts in dict_1.items():
    for bp, count in zip(bp_lengths, counts):
        data.append({
            'bp_length': bp,
            'cg_count': count,
            'organism': organism,
            'seq_type': '原始序列'
        })
# 添加随机序列数据
for organism, counts in dict_2.items():
    for bp, count in zip(bp_lengths, counts):
        data.append({
            'bp_length': bp,
            'cg_count': count,
            'organism': organism,
            'seq_type': '随机序列'
        })

# 转换为DataFrame
df = pd.DataFrame(data)

# 设置绘图主题
sns.set_theme()

# 绘制对比散点图
g = sns.relplot(
    data=df,
    x='bp_length',
    y='cg_count',
    hue='seq_type',  # 颜色区分原始/随机序列
    style='organism',  # 标记样式区分动物种类
    s=100,  # 设置点的大小
    markers=['o', 's'],  # 自定义标记:圆形=猫,方形=猎豹
    palette=['#1f77b4', '#ff7f0e']  # 自定义颜色:蓝色=原始,橙色=随机
)

# 设置图表标题和轴标签
g.set_axis_labels('碱基对长度 (bp)', 'CG重复次数')
g.fig.suptitle('不同序列类型下的CG重复次数对比', y=1.02)

效果说明

  • 不同颜色的点区分原始序列和随机序列
  • 不同形状的点区分猫和猎豹
  • 可直观观察同一动物在不同bp长度下,原始与随机序列的CG重复次数差异,也能对比不同动物间的差异

内容的提问来源于stack exchange,提问作者user19278046

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:03:16