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

Matplotlib绘制XML信号数据如何设置x轴为垂直显示的名称标签

方案1:直接替换x轴标签为Name字段并垂直显示

你当前绘图默认使用DataFrame的行索引作为x轴刻度,所以显示为数字,只需要修改绘图部分的代码,手动指定x轴的刻度和标签即可,修改后的代码如下:

import xml.etree.ElementTree as ET
import pandas as pd
from matplotlib import pyplot as plot

def transformData (rootXML):
  print ("File:", rootXML)
  file_xml = ET.parse (rootXML)
  data_XML = [
      {"Name": signal.attrib ["Name"],
        "Value": int (signal.attrib ["Value"].split(' ')[0])
        # 修正原代码列表生成式多写的the关键词
        } for signal in file_xml.findall (".//Signal")
  ]
  # 修正原代码变量名错误,XML_data改为定义的data_XML
  signals_df = pd.DataFrame (data_XML)
  target_df = signals_df[(signals_df ["Name"] == 'Status') | (signals_df ["Name"] == 'Lock_Stat')].reset_index(drop=True)
  
  ax = target_df.plot(kind = 'line', y='Value', rot = 0)
  # 设置x轴刻度位置为所有行的索引,标签对应每行的Name字段,旋转90度垂直显示
  ax.set_xticks(target_df.index)
  ax.set_xticklabels(target_df['Name'], rotation=90)
  
  plot.title ('信号触发时的数值变化')
  plot.xlabel ('信号名称')
  plot.ylabel ('信号数值')
  # 自动调整布局,避免底部标签被截断
  plot.tight_layout()
  plot.show ()
  plot.clf ()
  plot.close ()

数据量不大、标签数量不多的情况下该方案可直接生效。


方案2:标签数字映射+侧边说明

如果标签数量太多,垂直显示依然拥挤看不清,可以用数字映射的方案,代码修改如下:

import xml.etree.ElementTree as ET
import pandas as pd
from matplotlib import pyplot as plot

def transformData (rootXML):
  print ("File:", rootXML)
  file_xml = ET.parse (rootXML)
  data_XML = [
      {"Name": signal.attrib ["Name"],
        "Value": int (signal.attrib ["Value"].split(' ')[0])
        } for signal in file_xml.findall (".//Signal")
  ]
  signals_df = pd.DataFrame (data_XML)
  target_df = signals_df[(signals_df ["Name"] == 'Status') | (signals_df ["Name"] == 'Lock_Stat')].reset_index(drop=True)
  
  # 生成唯一名称到数字的映射
  unique_names = target_df['Name'].unique()
  name_code_map = {name:idx+1 for idx, name in enumerate(unique_names)}
  # 生成映射说明文本
  map_desc = "标签映射说明:\n" + "\n".join([f"{v}: {k}" for k,v in name_code_map.items()])
  
  ax = target_df.plot(kind = 'line', y='Value', rot = 0)
  # 在画布右侧添加映射说明
  ax.text(1.05, 0.5, map_desc, transform=ax.transAxes, 
          bbox=dict(facecolor='white', edgecolor='gray', alpha=0.9),
          verticalalignment='center')
  # 调整画布右侧边距,给说明留出空间
  plot.subplots_adjust(right=0.7)
  
  plot.title ('信号触发时的数值变化')
  plot.xlabel ('信号编号')
  plot.ylabel ('信号数值')
  plot.show ()
  plot.clf ()
  plot.close ()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:36:05