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

使用Python绘制数据箱线图遇报错及空图问题求助

解决箱线图绘制的两个问题:维度错误与空图问题

问题1:ValueError: X must have 2 or fewer dimensions 的原因

你最初的代码里,ran_yes 和 ran_no 是筛选后的整个DataFrame(包含所有列),而plt.boxplot()需要的是一维的数值数据(比如单一列的Series或数组)。直接把整个DataFrame传入,会导致维度不符合要求,触发报错。

问题2:空图的原因

修改后的代码里,subset = pulserate[(pulserate["Ran"] == "yes") & (pulserate["Ran"] == "no")] 逻辑错误:一行数据的Ran列不可能同时等于"yes"和"no",所以subset是空的DataFrame,绘制出来自然是空图。

正确的解决方法

假设你要绘制的是某一数值列(比如脉搏率列,假设列名为Pulse)按Ran分组的箱线图,以下是两种可行方案:

方案1:使用matplotlib手动整理数据

明确提取需要绘制的数值列,将其转为一维数组后传入plt.boxplot():

import matplotlib.pyplot as plt
import pandas as pd

pulserate = pd.read_csv("PulseNew.csv")
# 提取需要的数值列(替换成你实际要绘制的列名,比如"Pulse")
ran_yes_pulse = pulserate[pulserate["Ran"] == "yes"]["Pulse"]
ran_no_pulse = pulserate[pulserate["Ran"] == "no"]["Pulse"]

# 传入一维数据
plt.boxplot([ran_yes_pulse, ran_no_pulse])
# 添加标签让图表更清晰
plt.xticks([1, 2], ["Ran=yes", "Ran=no"])
plt.ylabel("Pulse Rate")
plt.title("Pulse Rate Distribution by Ran Status")
plt.show()

方案2:使用pandas自带的箱线图方法(更简洁)

pandas的DataFrame内置了boxplot()方法,可以直接按分组列绘制,无需手动拆分数据:

import pandas as pd
import matplotlib.pyplot as plt

pulserate = pd.read_csv("PulseNew.csv")
# 按"Ran"列分组,绘制"Pulse"列的箱线图
pulserate.boxplot(column="Pulse", by="Ran")
plt.title("Pulse Rate Distribution by Ran Status")
plt.suptitle("")  # 移除pandas自动添加的标题
plt.show()

注意事项

  • 确保你使用的数值列(比如示例中的Pulse)确实存在于你的CSV文件中,替换成你实际需要分析的列名。
  • 如果CSV中有缺失值,可以先用dropna()处理,比如pulserate = pulserate.dropna(subset=["Pulse", "Ran"]),避免绘制时出现问题。

内容的提问来源于stack exchange,提问作者Samuel S. Edme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:45:10