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

如何用Plotly绘制以Device_ID为X轴、十六进制值为Y轴的图表?

使用Plotly绘制以Device_ID为X轴、十六进制OTP_TRIM_BIT为Y轴的图表

问题描述

我有如下DataFrame,需要用Plotly绘制图表,要求X轴为Device_ID,Y轴以十六进制格式显示OTP_TRIM_BIT的值,该如何实现?

原始DataFrame

Device_ID   OTP_TRIM_BIT
    
    TTK_536     0x01
    TTK_537     0x01
    TTK_538     0x01
    TTK_542     0x01
    TTK_543     0x01
    FFK_571     0x0e
    FFK_572     0x0e
    FFK_573     0x0e
    FFK_574     0x0e
    FFK_575     0x0e
    SSK_586     0x02
    SSK_587     0x02
    SSK_588     0x01
    SSK_589     0x01
    SSK_590     0x02
    FSK_601     0x01
    FSK-602     0x01
    FSK_603     x01
    FSK_604     0x01
    FSK_605     0x01
    SFK_616     0x00
    SFK_617     0x00
    SFK_618     0x00
    SFK_619     0x0f

解决方案

步骤1:数据清洗与格式转换

Plotly的Y轴需要数值型数据,因此先处理原始数据中的格式错误,再将十六进制字符串转为十进制数值:

import pandas as pd
import plotly.express as px

# 构造DataFrame
data = {
    'Device_ID': ['TTK_536', 'TTK_537', 'TTK_538', 'TTK_542', 'TTK_543',
                  'FFK_571', 'FFK_572', 'FFK_573', 'FFK_574', 'FFK_575',
                  'SSK_586', 'SSK_587', 'SSK_588', 'SSK_589', 'SSK_590',
                  'FSK_601', 'FSK-602', 'FSK_603', 'FSK_604', 'FSK_605',
                  'SFK_616', 'SFK_617', 'SFK_618', 'SFK_619'],
    'OTP_TRIM_BIT': ['0x01', '0x01', '0x01', '0x01', '0x01',
                     '0x0e', '0x0e', '0x0e', '0x0e', '0x0e',
                     '0x02', '0x02', '0x01', '0x01', '0x02',
                     '0x01', '0x01', 'x01', '0x01', '0x01',
                     '0x00', '0x00', '0x00', '0x0f']
}

df = pd.DataFrame(data)

# 补全缺少0前缀的十六进制字符串
df['OTP_TRIM_BIT'] = df['OTP_TRIM_BIT'].apply(lambda x: '0' + x if x.startswith('x') else x)

# 将十六进制转为十进制数值
df['otp_decimal'] = df['OTP_TRIM_BIT'].apply(lambda x: int(x, 16))

步骤2:绘制图表并设置Y轴十六进制显示

用Plotly绘制图表后,自定义Y轴刻度标签为十六进制格式:

# 绘制柱状图(可替换为px.scatter等其他图表类型)
fig = px.bar(df, x='Device_ID', y='otp_decimal', title='Device ID vs OTP TRIM BIT')

# 把Y轴刻度替换为十六进制格式
fig.update_layout(
    yaxis=dict(
        tickmode='array',
        tickvals=df['otp_decimal'].unique(),
        ticktext=[f'0x{val:02x}' for val in df['otp_decimal'].unique()]
    )
)

# 展示图表
fig.show()

关键说明

  • f'0x{val:02x}'确保十六进制值以两位格式显示(如1显示为0x01,15显示为0x0f)
  • 数据清洗步骤不可省略,否则x01这类格式错误的字符串无法完成进制转换
  • 可根据需求替换图表类型,比如散点图、折线图等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:15:32