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

如何在Python中绘制按获奖状态分色的分类X轴蜡烛图

实现带自定义着色的球队区间蜡烛图(Plotly)

现有如下数据集,需绘制以球队名称为X轴、每个球队对应min到max值的蜡烛图,并根据Is_awarded字段着色:值为"Yes"时用红色,为None时用蓝色。使用Plotly时无法完成着色设置,求解决方法。

原始数据集代码

import pandas as pd

# 创建数据列表
data = [
    {"Team": "CHENNAI SUPER KINGS", "min": 1525, "max": 1625, "Is_awarded": "Yes"},
    {"Team": "LUCKNOW SUPER GIANTS", "min": 700, "max": 1600, "Is_awarded": None},
    {"Team": "RAJASTHAN ROYALS", "min": 200, "max": 725, "Is_awarded": None},
    {"Team": "ROYAL CHALLENGERS BANGALORE", "min": 220, "max": 650, "Is_awarded": None},
    {"Team": "SUNRISERS HYDERABAD", "min": 775, "max": 1475, "Is_awarded": None},
]

# 转为DataFrame
df = pd.DataFrame(data)

解决方案

Plotly原生蜡烛图(Candlestick)是为OHLC数据设计的,不适用于仅min/max的场景。我们可以通过手动绘制竖线+标记点的方式模拟蜡烛图效果,并实现自定义着色,具体步骤如下:

  1. 先为数据添加颜色映射字段
# 定义颜色规则:Is_awarded为Yes时用红色,否则用蓝色
df['color'] = df['Is_awarded'].apply(lambda x: 'red' if x == 'Yes' else 'blue')
  1. 使用Plotly绘制自定义蜡烛图
import plotly.graph_objects as go

fig = go.Figure()

# 遍历每个球队数据,绘制min到max的竖线
for idx, row in df.iterrows():
    # 绘制竖线:X轴为重复的球队名称,Y轴为min和max值
    fig.add_trace(go.Scatter(
        x=[row['Team'], row['Team']],
        y=[row['min'], row['max']],
        mode='lines',
        line=dict(color=row['color'], width=4),  # 设置线条颜色与宽度
        name=row['Team']
    ))
    
    # 可选:添加min和max端点的标记点,增强可读性
    fig.add_trace(go.Scatter(
        x=[row['Team']],
        y=[row['min']],
        mode='markers',
        marker=dict(color=row['color'], size=8),
        showlegend=False  # 隐藏标记点的图例,避免重复
    ))
    fig.add_trace(go.Scatter(
        x=[row['Team']],
        y=[row['max']],
        mode='markers',
        marker=dict(color=row['color'], size=8),
        showlegend=False
    ))

# 设置图表布局
fig.update_layout(
    title='球队min-max区间蜡烛图',
    xaxis_title='球队名称',
    yaxis_title='数值区间',
    showlegend=True
)

# 显示图表
fig.show()

替代方案:实心柱版蜡烛图

如果需要更接近传统蜡烛图的实心柱样式,可以用go.Bar实现:

fig = go.Figure()

for idx, row in df.iterrows():
    # 绘制从min到max的实心柱
    fig.add_trace(go.Bar(
        x=[row['Team']],
        y=[row['max'] - row['min']],
        base=row['min'],
        marker_color=row['color'],
        name=row['Team']
    ))

fig.update_layout(
    title='球队min-max区间蜡烛图(实心柱版)',
    xaxis_title='球队名称',
    yaxis_title='数值区间',
    showlegend=True
)

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:55:40