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

