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

如何使用二维数组正确绘制seaborn barplot柱状图

错误原因

你的代码存在两个核心问题,直接触发一维数组输入报错:

  1. 数组切片逻辑错误:x= peaks_width[0,:]取的是二维数组第一行的2个数值,而y= peaks_width[:,0]取的是第一列共80个初始峰宽值,两个数组长度完全不匹配
  2. 数据格式不符合seaborn.barplot的输入要求:你当前存储的是宽表结构(每行对应一个样本,两列分别存初始、最终峰宽),seaborn的分组柱状图要求输入长表结构,不能直接传入两个不匹配的切片调用绘图。
正确实现方法

首先确保已经导入依赖库,再根据绘图需求选择对应代码:

场景1:绘制两组峰宽的整体统计柱状图(展示均值+误差棒)

这是barplot最常用的场景,直接对比初始、最终读取的峰宽整体差异:

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 转换为seaborn兼容的长表结构
df = pd.DataFrame({
    "测量阶段": ["初始读取"] * len(peaks_width) + ["最终读取"] * len(peaks_width),
    "峰宽值": np.concatenate([peaks_width[:, 0], peaks_width[:, 1]])
})

# 绘图
ax = sns.barplot(data=df, x="测量阶段", y="峰宽值")
plt.show()

场景2:绘制每个样本对应的初始/最终峰宽对比柱状图

x轴为样本编号,每个样本对应两个柱子区分测量阶段:

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 生成长表
sample_ids = np.arange(len(peaks_width))
df = pd.DataFrame({
    "样本编号": np.tile(sample_ids, 2),
    "测量阶段": ["初始读取"] * len(peaks_width) + ["最终读取"] * len(peaks_width),
    "峰宽值": np.concatenate([peaks_width[:, 0], peaks_width[:, 1]])
})

# 绘图,样本数量多可旋转x轴标签避免重叠
ax = sns.barplot(data=df, x="样本编号", y="峰宽值", hue="测量阶段")
plt.xticks(rotation=90)
plt.show()

注:新版seaborn已经不推荐直接传入x、y位置参数不指定数据源的写法,优先传入结构化的DataFrame作为data参数,再指定x、y对应的列名,可以避免90%以上的输入格式报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:54:31