求助:如何用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
相关产品推荐
相关产品推荐

