python - 在 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 是否可以将标签转换为数字,然后在图形旁边的标签旁边绘制数字的描述,以使图形更易于理解?
解决方案
是的,您可以使用 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()
请注意,在大多数情况下,当您想对您的情节更感兴趣时,您需要更精确地操纵图形和斧头,并使用更多可用参数。
fig, ax = plt.subplots()
ax.set_xticks(range(len(data)))
ax.set_xticklabels(labels, rotation=90)
ax.plot(data)
plt.show()
# Same result
推荐阅读
- vue.js - 从 vue.js 生成文件下载
- r - 多个文件中变量之间的相关性
- javascript - 如何为使用 React 钩子的 Apollo 查询创建包装器
- html - 下拉选项不随选择框移动
- python-3.x - Python:检查元组是否仅包含带有while的整数
- scheme - 如何在Scheme中将十进制转换为十六进制?(需要在 GIMP 中将 RGB 转换为 HEX)
- sql - 在 SQL 查询方面需要一些帮助
- python - Keras 上的自定义损失函数
- elasticsearch - Elasticsearch:elasticsearch.service 的作业失败
- android - 错误构建gradle