首页 > 解决方案 > 在 x 轴 Matplotlib 上绘制带有垂直标签的图形

问题描述

为了继续研究如何绘制 xml 文件并继续检查我的代码,我首先对 应用了除法signal.attrib ["Value"],因为它显示了一些字符串值,而我感兴趣的是数值。

正如您在下面看到的,我依赖于Pandas 和 SQL Compare的文档。

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": signal.attrib ["Value"]
        "Value": int (signal.attrib ["Value"].split(' ')[0])
        } for the signal in file_xml.findall (".//Signal")
  ]

  signals_df = pd.DataFrame (XML_data)

  signals_df [(signals_df ["Name"] == 'Status') |
              (signals_df ["Name"] == 'Lock_Stat')]. plot (kind = 'line', rot = 0)
  plot.title ('Changing signals every time they occur')
  plot.xlabel ('Signal name')
  plot.ylabel ('Signal value')
  plot.show ()
  plot.clf ()
  plot.close ()

我用一个完整的 xml 文件运行它,其中包含很多信号,比如在这个链接中找到的那个:(我把它放在这里是因为它不允许我附加代码,因为 xml 的长度)

因此,一旦我编译了所有数据,我运行了图表,结果是这样的(并非所有标签都在文件中):

在此处输入图像描述

实际上我必须使用的是类似于此页面底部附近的“开关点跟踪”图。但现在我正在研究它,它以线条图的形式为我服务。

但是如何在 x 轴上用标签名称(“名称”)而不是数字 0、20、40 等来划分它,即如何使所有名称出现在图表上并将它们垂直放置?是否有可能做到这一点?或者我不知道... Matplotlib 是否可以将标签转换为数字,然后在图形旁边的标签旁边绘制数字的描述,以使图形更易于理解?

标签: pythonmatplotlibaxis-labels

解决方案


是的,您可以使用 xticks()。

# Your labels list
labels = [chr(x) for x in range(65, 91)]
# > ["A", "B", "C" ..., "Z"]  as an example
import numpy as np
data = np.random.rand(26, 1) # random data to illustrate

import matplotlib.pyplot as plt
plt.xticks(ticks=range(len(data)), labels=labels, rotation=90)
plt.plot(data) # Your data
plt.show()

带有旋转 xticks 的绘图示例

请注意,在大多数情况下,当您想对您的情节更感兴趣时,您需要更精确地操纵图形和斧头,并使用更多可用参数。

fig, ax = plt.subplots()
ax.set_xticks(range(len(data)))
ax.set_xticklabels(labels, rotation=90)
ax.plot(data)
plt.show()
# Same result

推荐阅读