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

如何用Plotly实现带彩色分段的极坐标扇形图?

解决方案

1. 拆分条形为彩色分段

要实现每个极坐标条形的彩色分段,你可以基于数值区间或原有数据的维度(比如strength风速强度)构造分层数据,通过多个bar_polar轨迹叠加,让每个分段对应独立的颜色与数值范围。

以你提供的wind数据集为例,保留所有strength类别,让每个方向的条形按不同风速强度拆分:

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

df = px.data.wind()
# 按方向和风速强度排序,保证分段顺序一致
df_sorted = df.sort_values(['direction', 'strength'])

fig = go.Figure()
# 为每个风速强度添加独立的极坐标条形轨迹
for strength in df['strength'].unique():
    df_sub = df_sorted[df_sorted['strength'] == strength]
    fig.add_trace(go.Barpolar(
        r=df_sub['frequency'],
        theta=df_sub['direction'],
        name=strength,
        marker_color=px.colors.sequential.YlGn[len(df['strength'].unique()) - df['strength'].unique().tolist().index(strength) - 1],
        opacity=0.8
    ))

# 调整布局优化显示
fig.update_layout(
    polar=dict(
        radialaxis=dict(visible=True, range=[0, df['frequency'].sum()/8]),
        angularaxis=dict(visible=True, direction='clockwise')
    ),
    legend_title_text='风速强度'
)

fig.show()

运行后每个方向的条形会拆分为不同强度对应的彩色分段,和你目标图的效果一致。

2. 用极坐标扇形替代条形

只需调整bar_polar的width参数,让条形宽度等于相邻方向的角度间隔即可。比如wind数据集有8个方向,每个方向间隔45度,设置width=45就能将条形转为扇形:

import pandas as pd
import plotly.express as px

df = px.data.wind()
df_test = df[df["strength"]=='0-1']

fig = px.bar_polar(df_test, r='frequency', theta='direction', color='frequency',
                   color_continuous_scale='YlGn', width=45)  # 设置宽度为角度间隔

fig.update_layout(polar=dict(angularaxis=dict(direction='clockwise')))
fig.show()

3. 添加横轴(径向轴优化)

极坐标的**径向轴(radial axis)**就是对应数值的横轴,你可以通过update_layout优化它的显示效果,比如添加刻度、标题:

fig.update_layout(
    polar=dict(
        radialaxis=dict(
            visible=True,
            tickmode='linear',
            tick0=0,
            dtick=5,
            title='频率'  # 添加轴标题
        )
    )
)

如果偏好笛卡尔坐标系的横轴,可改用堆叠条形图替代极坐标:

fig = px.bar(df_sorted, x='direction', y='frequency', color='strength',
             color_discrete_sequence=px.colors.sequential.YlGn, barmode='stack')
fig.show()

4. 适配的其他Plotly图表类型

  • 堆叠极坐标条形图:即上述第一种方案,最匹配你的需求;
  • 旭日图(Sunburst):适合展示方向、强度、频率的层级关系,但视觉风格与目标图差异较大;
  • 径向热力图:通过极坐标转换展示连续数据的密度分布,适合不同的数据分析场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:55:21