Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python绘制两个xml文件条目以进行比较_Python_Xml_Matplotlib_Comparison - Fatal编程技术网

使用python绘制两个xml文件条目以进行比较

使用python绘制两个xml文件条目以进行比较,python,xml,matplotlib,comparison,Python,Xml,Matplotlib,Comparison,如何通过在虚线图上绘制两个xml文件来直观地比较它们的条目 每个xml文件的格式如下所示: <queue-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/queue_file.xsd"> <data timestep="0.00"> <lanes> <

如何通过在虚线图上绘制两个xml文件来直观地比较它们的条目

每个xml文件的格式如下所示:

<queue-export xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/queue_file.xsd">
<data timestep="0.00">
    <lanes>
        <lane id="22972473#3_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="5.00"/>
    </lanes>
</data>
<data timestep="60.00">
    <lanes>
        <lane id="-22972470#0_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="5.00"/>
        <lane id="-22972470#2_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="6.01"/>
        <lane id="-4588224_0" queueing_time="60.00" queueing_length="97.32" queueing_length_experimental="0.00"/>
        <lane id="191556835#0_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="19.14"/>
        <lane id="191556835#1_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="14.36"/>
        <lane id="22972473#3_0" queueing_time="60.00" queueing_length="5.00" queueing_length_experimental="5.00"/>
        <lane id="47707171#1_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="11.08"/>
        <lane id="47707171#2_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="6.81"/>
    </lanes>
</data>
<data timestep="120.00">
    <lanes>
        <lane id="-168935757#0_0" queueing_time="60.00" queueing_length="85.84" queueing_length_experimental="0.00"/>
        <lane id="-4588219#3_0" queueing_time="60.00" queueing_length="120.82" queueing_length_experimental="0.00"/>
        <lane id="168935756_0" queueing_time="60.00" queueing_length="95.79" queueing_length_experimental="0.00"/>
        <lane id="196850607#1_0" queueing_time="60.00" queueing_length="108.43" queueing_length_experimental="0.00"/>
        <lane id="199847247#0_0" queueing_time="60.00" queueing_length="14.75" queueing_length_experimental="14.75"/>
    </lanes>
</data>
<data timestep="180.00">
    <lanes>
        <lane id=":25663154_5_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="8.04"/>
        <lane id=":3922684843_0_0" queueing_time="0.00" queueing_length="0.00" queueing_length_experimental="6.81"/>
    </lanes>
</data>

我想为每个数据时间步逐步地可视化每个xml文件中排队时间或排队长度的差异


希望您能指导我使用python代码或库或方法。

我会使用
lxml
库获取您想要的值:

from lxml import etree

file1 = etree.parse('/path/to/file1.xml')

# This will give you a list of Elements
data1 = file1.xpath('//data')

agg_1 = []

for timestep in data1:
    ts = []

    # The lanes element is the only (immediate) child of data,
    # so we can get each lane as the children of lanes
    lanes = timestep.getchildren()[0].getchildren()

    # Need to get the queueing_time and queueing_length
    # attributes from each lane
    for lane in lanes:
        ts.append((lane.attrib.get('queueing_time'), lane.attrib.get('queueing_length'))

    x, y = sum([float(x) for x,_ in ts]), sum([float(y) for _,y in ts])
    agg_1.append((x,y))
这将为您提供一个类似于
[(0.00,0.00),(120.00,102.32),…]的列表,其中每个条目表示一个时间戳(假设所有这些都在那里。您可以对
文件2
重复该过程,这将为您提供聚合统计信息。我已经有一段时间没有使用
matplotlib
,因此我可以将其添加到编辑中,但这应该可以让您开始

注:这不适用于以下情况:

  • 车道中有0个
    车道
    元素
  • 时间步长值不在列表中 xml(例如,如果跳过60)

您是否试图为所有
车道
timestep
聚合
排队时间
排队长度
?因此对于
timestep=120
,您是否想要
排队时间=300.00
排队长度=425.63
?是的,这似乎是合理的方法。