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

如何在Matplotlib中使用fill_between处理含单值数组的列表数据?

解决Matplotlib fill_between的where条件报错问题

报错原因很明确:你用列表做元素级相乘,而Python列表的*运算符是用来重复列表元素的(比如[1,2]*3得到[1,2,1,2,1,2]),并非执行元素-wise的乘法,因此会抛出TypeError: can't multiply sequence by non-int of type 'list'。

解决步骤

核心是把包含0维数组和NaN的列表转换成numpy数组——numpy支持元素级运算,还能自动处理0维数组(转为标量)和NaN值:

  1. 导入numpy库(未导入的话需添加导入语句)
  2. 将y_val和z_val转为numpy数组
  3. 用numpy数组计算where条件的判断式

示例代码

import numpy as np
import matplotlib.pyplot as plt

# 假设你的列表推导生成的原始数据(仅作示例)
x_val = [i for i in range(10)]
y_val = [np.array(3) if i%2==0 else np.nan for i in range(10)]
z_val = [np.array(1) if i%3==0 else np.nan for i in range(10)]

# 关键操作:转成numpy数组
y_arr = np.array(y_val)
z_arr = np.array(z_val)

fig, ax = plt.subplots()
# 原plot逻辑不受影响
ax.plot(x_val, y_val)
ax.plot(x_val, z_val)

# 使用numpy数组计算where条件
ax.fill_between(
    x_val, 
    y_val, 
    z_val, 
    where=(y_arr * z_arr) > 0,  # 用numpy数组执行元素级相乘
    alpha=0.3,
    color='lightblue'
)

plt.show()

为什么转float列表没用?

float列表本质还是Python列表,依然不支持元素级乘法操作,只有numpy数组才能实现你需要的“逐个元素相乘再判断”的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13