Seaborn柱状图分组绘制:按实验条件展示技术重复采样数据
实现方案
1. 核心思路
首先把宽格式的原始数据表转换为长格式,拆分出实验条件和重复编号两个维度,再通过seaborn的hue参数绑定实验条件,给每组分配唯一颜色,同组的4次重复用同色展示,直接通过同色柱的高度差判断采样一致性。
2. 完整代码示例
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 此处替换为你自己的原始DataFrame变量名,示例中用df_raw指代 # 第一步:宽表转长表,拆分维度字段 df_long = df_raw.melt( id_vars="Index", var_name="col_name", value_name="measure_value" ) # 从列名拆分实验条件和重复编号 df_long[["condition", "replicate"]] = df_long["col_name"].str.split("_", expand=True) # 第二步:绘制柱状图 plt.figure(figsize=(18, 7)) sns.barplot( data=df_long, x="col_name", y="measure_value", hue="condition", palette=sns.color_palette("Set2", 8), # 自动生成8种互不重复的专属颜色 dodge=False, # 关闭分柱逻辑,确保同组重复颜色统一 errorbar=None # 不需要展示误差棒可保留,需要的话改为"sd"展示标准差即可 ) # 可视化优化 # 简化x轴标签,只展示重复编号 xtick_labels = [lab.split("_")[1] for lab in df_long["col_name"].unique()] plt.xticks(ticks=range(32), labels=xtick_labels, fontsize=10) # 加组间分隔线,明确区分8组实验条件 for pos in range(4, 32, 4): plt.axvline(x=pos - 0.5, color="#aaa", linestyle="--", alpha=0.6) plt.xlabel("技术重复编号", fontsize=12) plt.ylabel("测量值", fontsize=12) plt.title("8组实验条件的技术重复采样一致性对比", fontsize=14) plt.legend(title="实验条件", bbox_to_anchor=(1.01, 1), loc="upper left") plt.tight_layout() plt.show()
3. 效果说明
生成的图表会按顺序排列8组实验,每组包含4个同色的柱子,分别对应4次技术重复。同组柱子的高度差异越小,说明该实验条件下的采样一致性越好。如果需要调整配色,替换palette参数的色板名称即可,seaborn内置的Paired、tab10等色板都支持生成8种以上的独立颜色。
内容的提问来源于stack exchange,提问作者JohanvH
相关产品推荐
相关产品推荐

