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

如何在Plotly Python的scatter_polar图表中排序角轴与径向轴标签?

调整Plotly Polar图表的轴标签排序方法

不管你用Plotly Graph Objects还是Plotly Express,都能轻松自定义极坐标图的角轴(小时)和径向轴(工作日)标签顺序,核心是指定分类的自定义排序数组,以下是具体实现方式:

方法一:使用Plotly Graph Objects(灵活可控)

先准备模拟数据和目标排序,再通过配置轴参数实现自定义顺序:

import plotly.graph_objects as go
import pandas as pd

# 模拟工作日各小时计数数据
data = pd.DataFrame({
    "工作日": ["周一", "周一", "周二", "周二", "周三", "周三"],
    "小时": [9, 14, 10, 15, 11, 16],
    "计数": [20, 35, 25, 40, 30, 45]
})

# 定义你需要的目标排序顺序
target_weekday_order = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
target_hour_order = list(range(24))  # 0-23的顺序,可替换为自定义小时列表

# 创建极坐标散点图
fig = go.Figure()
fig.add_trace(go.Scatterpolar(
    r=data["工作日"],  # 径向轴绑定工作日数据
    theta=data["小时"],  # 角轴绑定小时数据
    mode='markers',
    marker=dict(size=data["计数"], color=data["计数"], colorscale='Viridis'),
    text=data["计数"]
))

# 配置轴的自定义排序
fig.update_layout(
    polar=dict(
        radialaxis=dict(
            categoryorder='array',  # 指定使用自定义数组排序
            categoryarray=target_weekday_order,  # 传入工作日目标顺序
            title="工作日"
        ),
        angularaxis=dict(
            categoryorder='array',
            categoryarray=target_hour_order,  # 传入小时目标顺序
            title="小时",
            direction="clockwise",  # 可选:让小时顺时针排列,符合日常习惯
            tickmode="array",
            tickvals=target_hour_order,
            ticktext=[str(h) for h in target_hour_order]  # 可选:自定义刻度显示文本
        )
    ),
    title="工作日各小时计数极坐标图"
)

fig.show()

关键参数说明:

  • categoryorder='array':告诉Plotly不要用默认的字母/数值排序,改用你指定的数组顺序
  • categoryarray:传入预先定义好的目标排序列表,必须和数据中的轴值完全匹配(比如数据里是"周一",数组里不能写成"星期一")
  • direction="clockwise":角轴默认是逆时针排列,加上这个参数可以让小时从0点开始顺时针分布,更符合日常认知

方法二:使用Plotly Express(简洁高效)

如果用Plotly Express,直接通过category_orders参数就能快速指定排序,不需要单独配置轴:

import plotly.express as px
import pandas as pd

data = pd.DataFrame({
    "工作日": ["周一", "周一", "周二", "周二", "周三", "周三"],
    "小时": [9, 14, 10, 15, 11, 16],
    "计数": [20, 35, 25, 40, 30, 45]
})

target_weekday_order = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
target_hour_order = list(range(24))

fig = px.scatter_polar(
    data,
    r="工作日",
    theta="小时",
    size="计数",
    color="计数",
    category_orders={  # 直接指定各分类列的排序
        "工作日": target_weekday_order,
        "小时": target_hour_order
    }
)

# 可选:调整角轴为顺时针排列
fig.update_layout(
    polar=dict(
        angularaxis=dict(
            direction="clockwise"
        )
    )
)

fig.show()

注意事项:

  • 确保category_orders中的键名和数据中的列名完全一致
  • 如果你的小时数据是数值类型,target_hour_order可以直接用数值列表;如果是字符串类型,数组里也要对应使用字符串(比如["0", "1", ..., "23"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:28