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

求助:如何用Plotly/Dash实现按小时划分的径向图

解决Plotly径向图(极坐标折线图)的角度刻度与圆形线条问题

你当前代码的核心问题是把r和theta的参数搞反了,同时没有对极坐标的角度轴做针对性配置。以下是调整后的完整方案:

关键调整说明

  • 从DATE_TIME字段中提取小时数作为极坐标的角度(theta)数据,数值value作为径向长度(r)
  • 自定义角度轴的刻度为0、3、6、9、12、15、18、21,同时设置角度范围覆盖0-24小时
  • 固定径向轴范围,配合line_close=True确保线条闭合呈现规整圆形

修正后的代码

import random
import pandas as pd
import plotly.express as px

# 生成原始数据
df = pd.DataFrame({
    'DATE_TIME': pd.date_range('2022-11-01', '2022-11-05 23:00:00', freq='h'),
    'value': [random.uniform(110, 160) for n in range(120)]
})

# 提取小时数作为角度轴数据源
df['hour'] = df['DATE_TIME'].dt.hour

# 创建极坐标折线图,修正r和theta的对应关系
fig = px.line_polar(
    df,
    r='value',          # 数值对应径向长度
    theta='hour',       # 小时对应角度
    line_close=True,    # 开启线条闭合
    range_r=[100, 170]  # 固定径向范围,让线条更规整
)

# 配置角度轴(theta)的刻度与范围
fig.update_layout(
    polar=dict(
        theta=dict(
            tickmode='array',
            tickvals=[0, 3, 6, 9, 12, 15, 18, 21],  # 自定义刻度位置
            ticktext=['0', '3', '6', '9', '12', '15', '18', '21'],  # 刻度显示文本
            range=[0, 24],  # 角度范围覆盖完整24小时
            direction='clockwise'  # 可选:设置顺时针方向,贴合日常时钟逻辑
        )
    )
)

fig.show()

额外优化提示

  • 如果需要显示每小时的刻度,只需把tickvals和ticktext改为list(range(0,24))即可
  • range_r的数值范围可以根据你的实际数据区间调整,确保所有数据点都在径向范围内,保证圆形线条的完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:25:21