如何在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的场景。我们可以通过手动绘制竖线+标记点的方式模拟蜡烛图效果,并实现自定义着色,具体步骤如下:
- 先为数据添加颜色映射字段
# 定义颜色规则:Is_awarded为Yes时用红色,否则用蓝色 df['color'] = df['Is_awarded'].apply(lambda x: 'red' if x == 'Yes' else 'blue')
- 使用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
相关产品推荐
相关产品推荐

