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
相关产品推荐
相关产品推荐

