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

Python Plotly Express 面积图如何按数值正负条件设置填充颜色

Plotly时序面积图正负区域分色填充实现方案

你之前的实现方案之所以不符合预期,是因为px.area传入color参数时会按字段值拆分为多个独立的面积序列,不同分组的序列只会绘制对应分组内的数据段,正负数值的交界处会出现明显的填充断层,无法沿着0轴平滑衔接。

最优实现代码

import pandas as pd
import numpy as np
import plotly.graph_objects as go

# 读取数据并计算PnL指标
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv').assign(
    PnL = lambda x: x['AAPL.Close'] - 100
)
# 拆分正负PnL序列,非对应区间值设为0,保证两个序列都覆盖全部x轴范围
df['PnL_pos'] = np.where(df['PnL'] >= 0, df['PnL'], 0)
df['PnL_neg'] = np.where(df['PnL'] < 0, df['PnL'], 0)

# 构建图表
fig = go.Figure()
# 添加正数值填充区域
fig.add_trace(go.Scatter(
    x=df['Date'],
    y=df['PnL_pos'],
    fill='tozeroy',
    mode='lines',
    line_color='steelblue',
    name='正收益'
))
# 添加负数值填充区域
fig.add_trace(go.Scatter(
    x=df['Date'],
    y=df['PnL_neg'],
    fill='tozeroy',
    mode='lines',
    line_color='crimson',
    name='负收益'
))
# 调整图表尺寸
fig.update_layout(
    width=500,
    height=300
)
fig.show()

方案说明

  • 拆分后的正负序列均覆盖全部x轴范围,非对应区间值设为0,两个区域的填充基准都是0轴,交界处自然衔接不会出现断层
  • 如果想要去掉正负区域衔接处的线段突兀感,可以将两个trace的line_width参数设为0,只保留填充色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:18:02