sumo 提供了广泛的输出,但人们可能会发现解析和可视化它们很困难。下面,您可以找到一些工具,用于可视化仿真运行的结果,以便将其包含在科学论文中。其他工具读取纯 .csv 文件,并被添加到套件中,因为它们提供了类似的接口。
所有这些工具都只是围绕出色的 matplotlib 库的包装器。如果您熟悉 Python,一定要看一看。
这些工具共享一组通用选项来微调生成图形的外观。这些选项的名称选择得与 matplotlib 调用相似。
这些工具是用 Python 实现的,需要安装 matplotlib。这些工具可以在 <SUMO_HOME>/tools/visualization 中找到。
当前工具#
下面,您将找到应该与当前 sumo/sumo-gui 生成的输出一起工作的工具的描述。要运行它们,您需要:
- 安装 Python
- 安装 matplotlib
- 设置 <SUMO_HOME>
所有脚本都从命令行执行,您必须提供如下所述的命令行选项。请注意,#通用选项 可以应用于以下小节中列出的所有脚本,尽管某些选项可能对某些脚本不起作用。
plotXMLAttributes.py#
从一个或多个 xml 文件中创建多个 2D 图,这些图包含两个任意属性,并按第三个属性(即检测器 id)进行聚合。
使用示例:
python tools/visualization/plotXMLAttributes.py -x x -y y fcd.xml
python tools/visualization/plotXMLAttributes.py -x x -y y fcd.xml fcd2.xml
上面的示例基于 fcd 输出绘制所有车辆通过网络的路径。(这是一个特例,也可以用 plot_trajectories.py 完成)
当设置了选项 --show 时,会打开一个交互式绘图,允许通过点击绘图来识别数据点车辆(dataID 会打印在控制台上)。
选项 --filter-ids ID1,ID2,... 允许将绘图限制为给定的数据元素 id。您可以使用通配符来过滤掉遵循某种模式的 id;例如 --filter-ids bus_* 将过滤掉所有以四个字符 "bus_" 开头的 id。
下面显示了更多示例。其中一些是使用 acosta 场景生成的,这是已发布的 sumo 场景之一 (https://github.com/DLR-TS/sumo-scenarios/tree/main/bologna/acosta)。
绘图样式#
该脚本支持以下不同的绘图样式:
- lineplot: 默认
- scatterplot: 使用选项 --scatterplot
- box plot: 通过设置 --xattr @BOX 或 --yattr @BOX 之一
- bar plot: 通过设置 --barplot 或 --hbarplot
特殊属性#
以下属性值具有特殊含义。它们不是使用输入文件中的属性,而是基于其他属性派生值。(即,如果特殊属性设置为 --xattr,则其他值由 --yattr 给出)。
@INDEX: 使用输入文件中其他值的索引。@FILE: 使用(缩短的)输入文件名(当绘制每个文件一个值时很有用)@RANK: 使用其他值在排序(降序)值列表中的索引。@COUNT: 使用其他值的出现次数。与选项 --barplot 或 -hbarplot 一起使用,这会给出直方图。可以通过选项 --xbin 和 --ybin 设置分箱大小。@DENSITY: 使用其他值的出现次数,按值的总数进行归一化。@BOX: 绘制其他值的一个或多个箱线图。--idattr 用于分组,每个 id 将有一个箱线图。@NONE: 可与选项 --idattr 一起使用以显式避免分组。
交互式绘图#
当点击线条或绘图点时,点击位置附近的数据点 id 会打印在控制台上。
过滤#
选项 --filter-ids ID1,ID2,... 允许将绘图限制为给定的数据 id。
在指定过滤器时允许使用通配符 *, ?, [ 和 ]。这根据文件名通配规则工作。
多线绘图#
- 默认情况下,每个不同的 ID(由 --idattr 定义)将为与该 ID 关联的所有数据点生成一条新线。
- 如果给出了多个文件,缩写的文件名将成为数据点 ID 的一部分,从而为每个文件的数据创建不同的线或散点。
- 如果将逗号分隔的值列表传递给选项 --idattr,则每个属性的值将与
|组合以形成数据点 ID。 - 如果将逗号分隔的值列表传递给 --xattr 或 --yattr(或两者),并且数据不提供 ID(或设置了选项 --idattr @NONE),则每个单独的 xattr 和 yattr 的组合将创建一条新线。
CSV 输出#
如果需要一个无法使用上述任何方法创建的组合图(即因为数据来自不同类型的数据文件,例如 summary-output 和 edgeData),则另一种方法是使用选项 --csv-output 并使用另一个工具(即 gnuplot)绘制结果数据。
在 csv 输出中,属于同一 ID 的每组数据点将形成自己的块,并与下一个块用两个空行分隔。 要在 gnuplot 中复制每个 ID/块具有不同颜色的绘图,可以使用以下方法:
stats 'data.csv'
plot for [idx=0:STATS_blocks] 'data.csv' i idx with lines
XML 格式假设#
plotXMLAttributes 的默认解析引擎假设每个 xml 元素在输入文件中恰好占一行。这符合所有 SUMO 应用程序的输出格式。 如果要绘制任意 XML 文件(即没有换行符),可以设置选项 --robust-parser。这将降低处理速度。
感应线圈速度随时间变化#
输入是 inductionloop-output,包含来自 2 个检测器的 30 秒聚合(<e1Detector id="e1Detector_-109_0_0" lane="-109_0" pos="54.06" period="30.00" file="data.xml"/>)
调用:python tools/visualization/plotXMLAttributes.py data.xml -x begin -y speed -s

车道区域检测器随 nVehEntered 变化#
输入是 laneareadetectors-output,包含来自 6 个检测器的 30 秒聚合
调用:python tools/visualization/plotXMLAttributes.py -x begin -y maxOccupancy -o plot-maxOccupancy.png --legend e2_output.xml --filter-ids e2_0,e2_5,e2_10,e2_15,e2_20,e2_25

多入口出口检测器平均速度随时间变化#
输入是 multi-entry-exit-detector-output,包含 30 秒聚合,并在开始和结束处截断
调用:python tools/visualization/plotXMLAttributes.py -x begin -y meanSpeed detector.xml --legend --xlim 100,5000

每个站点的登车乘客数与延误#
输入是 stop-output
调用:python tools/visualization/plotXMLAttributes.py stopinfos.xml -i busStop -x loadedPersons -y delay --scatterplot --legend

来自 edgeData 的基本图#
输入是 edgeData-output,包含 1 分钟聚合(<edgeData id="example" file="data.xml" period="60"/>)
调用:python tools/visualization/plotXMLAttributes.py data.xml -i id -x density -y left --scatterplot --yfactor 60 --ylabel vehs/hour
每种颜色代表不同的 edge-id。选项 --factor 60 用于将车辆/60 秒(edgeData-period 60)转换为车辆/小时。

来自 summary-output 的多个时间线#
输入是 summary。 此图演示了使用属性列表从同一 xml 输入元素生成多个数据点。 在没有 id-attribute 的情况下,相应的属性名称用于“识别”和分组数据点。
调用:python tools/visualization/plotXMLAttributes.py summary.xml -x time -y running,halting -o plot-running.png --legend

注意
在 1.15.0 及更低版本中,必须提供 id-attribute,因此您需要提供一个虚拟值(即使用 -i collisions),并且 x 和 y 属性只允许一个值。
来自 TripInfo 数据的出发延误随时间变化#
该图由 TripInfo 输出数据创建:
调用 python tools/visualization/plotXMLAttributes.py -i id -x depart -y departDelay --scatterplot --xlabel "depart time [s]" --ylabel "depart delay [s]" --ylim 0,40 --xticks 0,1200,200,10 --yticks 0,40,5,10 --xgrid --ygrid --title "depart delay over depart time" --titlesize 16 tripInfo.xml

碰撞时间随仿真时间变化#
该图由 SUMO 仿真输出文件创建,其中添加了全局 SSM 设备。在此示例中,从 Bologna "acosta" 场景 开始,SUMO 配置文件已被修改以计算碰撞时间:
<configuration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/sumoConfiguration.xsd">
<device.ssm.deterministic value="true"/>
<device.ssm.file value="ssm.xml"/>
<device.ssm.measures value="TTC"/>
</configuration>
仿真运行完成后,会生成一个 XML 文件 ssm.xml。使用此文件,我们可以通过命令行提取并绘制 TTC 值:
python.exe .\plotXMLAttributes.py ssm.xml -x time --xlabel "Time [s]" -y value --ylabel "TTC [s]" -i ego --filter-ids bus_* --title "time to collision over simulation time" --scatterplot

排队时间随时间变化#
输入是 queue-output。
生成图的调用:
python tools/visualization/plotXMLAttributes.py -x timestep -y queueing_time -o queue.png queue.xml -i id --filter-ids 121_0
其中 -x 是 x 轴的属性;-y 是 y 轴的属性;-o 是输出文件名;-i 是过滤的属性名称(本例中为车道 id);--filter-ids 是过滤属性名称的值(本例中 id = 121_0)。

出发时间与到达时间#
输入是 vehroutes-output。
生成图的调用:
python tools/visualization/plotXMLAttributes.py -x depart -y arrival -o vehroute.png vehroute.xml --scatterplot
其中 -x 是 x 轴的属性;-y 是 y 轴的属性;-o 是输出文件名;--scatterplot 是为了制作散点图而不是线图。

前车间隙与速度#
输入是 lanechange-output。
生成图的调用:
python tools/visualization/plotXMLAttributes.py -x speed -y leaderGap -o lc.png lanechange.xml -i reason --filter-ids speedGain
其中 -x 是 x 轴的属性;-y 是 y 轴的属性;-o 是输出文件名;-i 是过滤的属性名称(本例中为换道原因);--filter-ids 是过滤属性名称的值(本例中 reason = speedGain)。

所有轨迹随时间变化 1#
输入是 fcd_output。
生成图的调用:
python tools/visualization/plotXMLAttributes.py -x x -y y -o allXY_output.png fcd.xml --scatterplot
其中 -x 是 x 轴的属性;-y 是 y 轴的属性;-o 是输出文件名;--scatterplot 是为了制作散点图而不是线图。

选定轨迹随时间变化 1#
输入是 fcd_output。
生成图的调用:
python tools/visualization/plotXMLAttributes.py -x x -y y -o vehLocations_output.png fcd.xml -i id --filter-ids Audinot_7_0 --scatterplot --legend
其中 -x 是 x 轴的属性;-y 是 y 轴的属性;-o 是输出文件名;-i 是过滤的属性名称(本例中为车辆 id);--filter-ids 是过滤属性名称的值(本例中 vehicle id = Audinot_7_0);--scatterplot 是为了制作散点图而不是线图;--legend 是为了显示图例。

公共交通时刻表#
注意
工具 plotStops.py 简化了此类时刻表的绘制
在此类图中,时间在 y 轴上,从上到下运行。输入是公共交通时刻表的路线文件,其中每辆车都是单独建模的。
也可以通过使用属性 started 或 ended(或 started,ended)代替 until,从 stop-output 生成类似的图。
生成图的调用:
python tools/visualization/plotXMLAttributes.py route.rou.xml -x busStop -y until --ytime1 --legend --xticks-file stoplist.txt --invert-yaxis --marker o

文件 stoplist.txt 用于定义站点的顺序(对应于它们在运输线路上的顺序),如下所示。
为了将属于同一火车站不同轨道的公交车站分组,它们在 id 中使用了共同的后缀,并且 stoplist.txt 文件使用通配符 (*) 来匹配它们。
*WLA
*KI
*MM
*KX
*LHG
注意
plotStops.py 的主要优点是自动创建 stoplist.txt 文件。
注意
当绘制来自也定义了 <vType> 元素的路线文件的站点时,必须使用选项 --idelem 来声明 id 属性必须从哪里加载(即 --idelem trip)。
随时间变化的转弯计数#
此图使用属性列表作为值 id (-i from,to) 来反映转弯关系由两个属性的组合唯一标识的事实。它还演示了灵活的过滤以显示所有通过边 -40 或边 36 的交通。
生成图的调用:
python tools/visualization/plotXMLAttributes.py turnCounts.xml -i from,to -x begin -y count --xtime0 --legend --filter-ids="-40|*,36|*"

箱线图:按 departLane 划分的等待时间#
此图演示了单个属性(waitingTime)的箱线图。可选择按类别(departLane)拆分。该调用使用来自两个不同仿真运行的 tripinfo-output 作为其输入。
生成图的调用:
python tools/visualization/plotXMLAttributes.py tripinfos.xml tripinfos2.xml -x waitingTime -y @BOX -i departLane --show

注意
通过交换 x 属性和 y 属性,可以将箱线图的方向从水平更改为垂直
timeLoss 的直方图#
此图演示了 --barplot 分箱和 @COUNT 的使用,以创建来自两个仿真运行的 timeLoss 值的直方图。
它还显示了如何将数据限制在 300 的上限。
生成图的调用:
plotXMLAttributes.py tripinfos.xml tripinfos2.xml -x timeLoss -y @COUNT -i @NONE --legend --barplot --xbin 20 --xclamp :300

注意
设置 -i @NONE 很重要,以确保 timeLoss 值按文件而不是按车辆 id 聚合。
plot_trajectories.py#
创建从通过 --fcd-output 生成的文件中获得的所有轨迹的图。此工具特别位于 <SUMO_HOME>/tools 中。
使用示例:
python tools/plot_trajectories.py fcd.xml -t td -o plot.png -s
选项 -t (--trajectory-type) 支持可以相互绘制的不同属性。参数是一个双字母代码,每个字母编码一个从 fcd 输入派生的属性。
注意
plot_trajectories.py 与 plotXMLAttributes.py 类似,但专门用于 fcd-output。它支持加载数据中不存在的派生属性(行驶距离),并且还允许更多过滤(--filter-route, --filter-edges)。
可用属性#
- t: 时间(秒)
- d: 行驶距离(从每个车辆的第一个 fcd 数据点开始为 0)。距离基于速度使用欧拉积分计算。设置选项 --ballistic 以使用弹道积分。
- a: 加速度
- s: 速度 (m/s)
- i: 车辆角度(导航度)
- x: X 位置 (m)
- y: Y 位置 (m)
- k: 里程(需要 --fcd-output.distance)
- g: 与前车的间隙(需要 --fcd-output.max-leader-distance)
轨迹类型示例#
- td: 时间与距离
- ts: 时间与速度
- ta: 时间与加速度
- ds: 距离与速度
- da: 距离与加速度
- xy: 驾驶路径的空间图
- kt: 里程与时间(与选项 --invert-yaxis 结合使用以获得经典的铁路图)。
加速度与距离#
输入是 fcd-output。
生成图的调用:
python tools/plot_trajectories.py -t da -o Plot_trajectories.png fcd.xml
其中 -t 是上述轨迹类型;-o 是输出文件名。

所有轨迹随时间变化 2#
输入是 fcd-output。
生成图的调用:
python tools/plot_trajectories.py -t xy -o allLocations_output.png fcd.xml
其中 -t 是上述轨迹类型;-o 是输出文件名。

选定轨迹随时间变化 2#
输入是 fcd-output。
生成图的调用:
python tools/plot_trajectories.py -t xy -o selectXY_output.png fcd.xml --filter-ids Audinot_7_0
其中 -t 是上述轨迹类型;-o 是输出文件名;--filter-ids 是过滤属性的值(本例中 id = Audinot_7_0)。

基于 FCD 的速度随时间变化#
输入是 fcd-output。
生成图的调用:
python tools/plot_trajectories.py -t ts -o timeSpeed_output.png fcd.xml --filter-ids Audinot_7_0,Costa_12_0,Pepoli_3_0,Silvani_11_0,XXI_APRILE_7_0 --legend
其中 -t 是上述轨迹类型;-o 是输出文件名;--filter-ids 是过滤属性的值(本例中 id 在 [Audinot_7_0, Costa_12_0, Pepoli_3_0, Silvani_11_0, XXI_APRILE_7_0] 中);--legend 是为了显示图例

交互式绘图#
当设置了选项 -s 时,会打开一个交互式绘图,允许通过点击相应的线条来识别车辆(车辆 id 会打印在控制台上)。
过滤#
选项 --filter-route EDGE1,EDGE2,... 允许将绘图限制为包含给定边集的所有轨迹。
选项 --filter-ids ID1,ID2,... 允许将绘图限制为给定的车辆 id
plot_net_dump.py#
plot_net_dump.py 显示一个网络,其中网络边的颜色和宽度取决于定义的边属性。边权重从 "edgedumps" 读取 - edgelane traffic、edgelane emissions 或 edgelane noise。
![]() |
它显示了在建立环保区后,不伦瑞克市周二至周四类型的交通变化。 |
![]() |
显示 NOx 排放的相应变化。 |
- --dump-inputs <FILE>,<FILE> 和 --measures <STRING>,<STRING> 都期望两个条目,用 ',' 分隔。第一个用于边的颜色,第二个用于它们的宽度。但您可以简单地跳过一个条目。然后,使用默认值。
- dump 文件通常覆盖多个间隔。要为每个间隔生成一个额外的输出文件,请在输出文件名中使用字符串 '%s'(此部分将被相应的开始时间替换)。
注意
如果给出了两个输入文件,它们必须覆盖相同的时间间隔,否则将不会绘制任何数据。
选项
这里列出了最重要的选项。使用 --help 查看所有选项。
| 选项 | 描述 |
|---|---|
| -n <FILE> --net <FILE> |
定义要读取的网络 |
| -i <FILE>,<FILE> --dump-inputs <FILE>,<FILE> |
定义要用作输入的 dump-output 文件 |
| -m <STRING>,<STRING> --measures <STRING>,<STRING> |
定义要绘制的度量;默认值: speed,entered |
| -w <FLOAT> --default-width <FLOAT> |
定义默认边宽度;默认值: .1 |
| -c <COLOR> --default-color <COLOR> |
定义默认边颜色 |
| --min-width <FLOAT> | 定义最小边宽度;默认值: .5 |
| --max-width <FLOAT> | 定义最大边宽度;默认值: 3 |
| --log-colors | 如果设置,颜色按对数缩放 |
| --log-widths | 如果设置,宽度按对数缩放 |
| --min-color-value <FLOAT> | 如果设置,定义最小边颜色值 |
| --max-color-value <FLOAT> | 如果设置,定义最大边颜色值 |
| --min-width-value <FLOAT> | 如果设置,定义最小边宽度值 |
| --max-width-value <FLOAT> | 如果设置,定义最大边宽度值 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
| --internal | 如果设置,内部边(路口的)将包含在生成的形状中。 |
plot_net_selection.py#
plot_net_selection.py 读取一个道路网络和一个由 sumo-gui 写入的选择文件。它绘制道路网络,为选择中的边(选择中至少有一条车道的所有边)选择不同的颜色和宽度。
![]() |
该示例显示了“环保区”的选择。 |
选项
| 选项 | 描述 |
|---|---|
| -n <FILE> --net <FILE> |
定义要读取的网络 |
| -i <FILE> --selection <FILE> |
定义要读取的选择文件 |
| --selected-width <FLOAT> | 定义选定边的宽度;默认值: 1 |
| --selected-color <COLOR> | 定义选定边的颜色;默认值: r (红色) |
| --edge-width <FLOAT> | 定义默认边宽度;默认值: .2 |
| --edge-color <COLOR> | 定义默认边颜色;默认值: #606060 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
plot_net_speeds.py#
plot_net_speeds.py 读取一个道路网络,并使用允许的速度为边着色。它更像是使用从网络文件读取的度量的一个示例。
![]() |
该示例按其最大允许速度为德国不伦瑞克的街道着色。 |
选项
| 选项 | 描述 |
|---|---|
| -n <FILE> --net <FILE> |
定义要读取的网络 |
| --edge-width <FLOAT> | 定义默认边宽度;默认值: .2 |
| --edge-color <COLOR> | 定义默认边颜色;默认值: #606060 |
| --minV <FLOAT> | 定义最小值边界 |
| --maxV <FLOAT> | 定义最大值边界 |
| -v --verbose |
如果设置,脚本会说明它在做什么 |
plot_net_trafficLights.py#
plot_net_trafficLights.py 读取一个道路网络并绘制它,此外还在属于网络的交通灯位置添加点/标记。
![]() |
该示例显示了不伦瑞克的交通灯。 |
选项
| 选项 | 描述 |
|---|---|
| -n <FILE> --net <FILE> |
定义要读取的网络 |
| --edge-width <FLOAT> | 定义默认边宽度;默认值: .2 |
| --edge-color <COLOR> | 定义默认边颜色;默认值: #606060 |
| --minV <FLOAT> | 定义最小值边界 |
| --maxV <FLOAT> | 定义最大值边界 |
| -v --verbose |
如果设置,脚本会说明它在做什么 |
plot_summary.py#
plot_summary.py 读取一个或多个 summary-files 并绘制选定的度量(读取的 summary-files 的属性)。该度量作为沿仿真时间的时间线进行可视化。
![]() |
该示例显示了不伦瑞克市大规模场景中,标准工作日类别下一天中运行的车辆数量。“mo.xml”、“dido.xml”、“fr.xml”、“sa.xml”和“so.xml”是分别来自周一、周二至周四、周五、周六和周日类型仿真的 summary-files。 |
选项
| 选项 | 描述 |
|---|---|
| -i <FILE>[,<FILE>]* --summary-inputs <FILE>[,<FILE>]* |
定义要读取的 summary-file |
| -m <STRING> --measure <STRING> |
定义要从 summary 文件读取的度量;默认值: running |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
| --dpi <FLOAT> | 定义图形的 dpi 分辨率;默认值: None |
plot_tripinfo_distributions.py#
plot_tripinfo_distributions.py 读取一个或多个 tripinfo-files 并绘制选定的度量(读取的 tripinfo-files 的属性)。该度量作为垂直条形图进行可视化,这些条形图代表落入一个分箱的度量(车辆)的出现次数。
|
该示例显示了不同工作日类别车辆的行程时间分布(不伦瑞克场景)。“mo.xml”、“dido.xml”、“fr.xml”、“sa.xml”和“so.xml”是分别来自周一、周二至周四、周五、周六和周日类型仿真的 tripinfo-files。 |
|
该示例显示了车辆在行程中必须停站的次数分布。停站次数超过 9 次的车辆被添加到直方图的最后一个分箱中。 |
选项
| 选项 | 描述 |
|---|---|
| -i <FILE>[,<FILE>]* --tripinfos-inputs <FILE>[,<FILE>]* |
定义要读取的 summary-file |
| -m <STRING> --measure <STRING> |
定义要从 summary 文件读取的度量 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
| --bins <INT> | 将值划分为的分箱数量 |
| --norm <FLOAT> | 定义一个数字,读取的值将除以该数字;默认值: 1.0 |
| --minV <FLOAT> | 最小值;如果设置,低于此值的读取值将设置为此值 |
| --maxV <FLOAT> | 最大值;如果设置,高于此值的读取值将设置为此值 |
plot_csv_timeline.py#
plot_csv_timeline.py 读取一个 .csv 文件,并使用 --columns <INT>[,<INT>]* 选项绘制选定的列。这些值作为线条进行可视化。
![]() |
该示例显示了 新欧洲驾驶循环 (NEDC)。 |
选项
| 选项 | 描述 |
|---|---|
| -i <FILE> --input <FILE> |
定义要使用的输入文件 |
| -c <INT>[,<INT>]* --columns <INT>[,<INT>]* |
定义要绘制的列 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
plot_csv_pie.py#
plot_csv_pie.py 读取一个 .csv 文件,该文件被假定在第一列包含名称,在第二列包含相应的值。读取的名称/值对作为饼图进行可视化。
|
注意: 请注意,您应该使用 --size <FLOAT>,<FLOAT> 选项将宽度和高度设置为相同的值,参见#通用选项。否则您会得到一个椭圆形。 |
选项
| 选项 | 描述 |
|---|---|
| -i <FILE> --input <FILE> |
定义要读取的输入文件 |
| -p --percentage |
将读取的度量解释为百分比 |
| -r --revert |
在绘制之前反转读取值的顺序 |
| --no-labels | 不绘制标签 |
| --shadow | 在圆圈下方放置阴影 |
| --startangle <FLOAT> | 设置起始角度 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
plot_csv_bars.py#
plot_csv_bars.py 读取一个 .csv 文件,该文件被假定在第一列包含名称,在第二列包含相应的值。读取的名称/值对作为条形图进行可视化。
|
|
选项
| 选项 | 描述 |
|---|---|
| -i <FILE> --input <FILE> |
定义要用作输入的 csv 文件 |
| -x <INT> --column <INT> |
定义要绘制的读取 .csv 文件的哪一列;默认值: 1 |
| -r --revert |
在绘制之前反转读取值的顺序 |
| -w <FLOAT> --width <FLOAT> |
定义条形的宽度;默认值: .8 |
| --space <FLOAT> | 定义条形之间的空间;默认值: .2 |
| --norm <FLOAT> | 定义一个数字,读取的值将除以该数字;默认值: 1.0 |
| --show-values | 显示值 |
| --values-offset <FLOAT> | 值的位置偏移 |
| --vertical | 绘制垂直条形(默认是水平条形) |
| --no-labels | 不绘制标签 |
| -v --verbose |
如果设置,进度将打印在屏幕上 |
macrOutput.py#
此工具将 EdgeData 输出绘制为基本图(体积-密度、速度-密度和体积-速度关系,每个边和车道)。 这要求 EdgeData 输入文件具有包含 sampledSeconds、density、laneDensity 和 speed 属性的间隔数据。该工具支持通用选项。不过,输出被解释为目录而不是文件。输出文件名如下:
- Edge_vk.png (速度-密度关系)
- Edge_qk.png (体积-密度关系)
- Edge_qv.png (体积-速度关系)
- Lane_vk.png (速度-密度关系)
- Lane_qk.png (体积-密度关系)
- Lane_qv.png (体积-速度关系)
示例调用:python macrOutput.py edgeData.xml
通用选项#
以下选项是所有先前列出的工具通用的。它们可以分为两组:
- 用于格式化图形的选项(包括添加标题等)
- 用于确定如何处理生成图形的选项
这些选项分别在以下小节中列出和讨论。
格式化选项#
| 选项 | 描述 |
|---|---|
| --colors <COLOR> | 使用给定的颜色;给定的颜色数量必须与要绘制的度量数量相同 |
| --colormap <STRING> | 使用命名的颜色映射 |
--labels <LABELS>-l <LABELS> |
使用给定的标签;给定的标签数量必须与要绘制的度量数量相同 |
--xlim <XMIN>,<XMAX> |
描述图形沿 x 轴的限制 |
--ylim <YMIN>,<YMAX> |
描述图形沿 y 轴的限制 |
--xticks <XMIN>,<XMAX>,<XSTEP>,<XSIZE>--yticks <XSIZE> |
如果只给出一个数字,则将其解释为 x 轴上刻度标签的大小;如果给出四个数字,则分别解释为最低刻度位置、最高刻度位置、刻度之间的步长以及刻度的大小,所有这些都沿 x 轴 |
--yticks <XMIN>,<XMAX>,<XSTEP>,<XSIZE> --yticks <XSIZE> |
如果只给出一个数字,则将其解释为 y 轴上刻度标签的大小;如果给出四个数字,则分别解释为最低刻度位置、最高刻度位置、刻度之间的步长以及刻度的大小,所有这些都沿 y 轴 |
| --xtime0 | 如果设置,沿 x 轴的刻度标签将格式化为时间条目 (hh) |
| --ytime0 | 如果设置,沿 y 轴的刻度标签将格式化为时间条目 (hh) |
| --xtime1 | 如果设置,沿 x 轴的刻度标签将格式化为时间条目 (hh:mm) |
| --ytime1 | 如果设置,沿 y 轴的刻度标签将格式化为时间条目 (hh:mm) |
| --xtime2 | 如果设置,沿 x 轴的刻度标签将格式化为时间条目 (hh:mm:ss) |
| --ytime2 | 如果设置,沿 y 轴的刻度标签将格式化为时间条目 (hh:mm:ss) |
| --xgrid | 如果设置,将沿 x 轴的刻度绘制网格 |
| --ygrid | 如果设置,将沿 y 轴的刻度绘制网格 |
| --xticksorientation <FLOAT> | x 刻度的方向(度);默认值: matplotlib 默认 |
| --yticksorientation <FLOAT> | y 刻度的方向(度);默认值: matplotlib 默认 |
| --xlabel <STRING> | 定义为 x 轴设置的标签 |
| --ylabel <STRING> | 定义为 y 轴设置的标签 |
| --xlabelsize <FLOAT> | 定义 x 轴标签的大小 |
| --ylabelsize <FLOAT> | 定义 y 轴标签的大小 |
| --marker <STRING> | Matplotlib 绘制点的标记样式;默认值: 'o' 表示散点图中的点,否则不使用 |
| --linestyle <STRING> | Matplotlib 绘制线的线型;默认值: '-' 表示连续线 |
| --title <STRING> | 定义图形的标题 |
| --titlesize <FLOAT> | 定义标题的大小 |
| --adjust <FLOAT>,<FLOAT> --adjust <FLOAT>,<FLOAT>,<FLOAT>,<FLOAT> |
调整绘图;如果给出两个浮点数,则解释为左和下值,如果给出四个数字,则解释为左、下、右、上 |
| --size <FLOAT>,<FLOAT> | 定义图形的大小 |
| --no-legend | 如果设置,不绘制图例 |
| --legend-position <STRING> | 定义图例的位置;默认值: matplolib 默认 |
| --alpha <FLOAT> | 定义绘图背景的不透明度,范围从 0=完全透明到 1=不透明;默认值: 1 |
交互选项#
如果其中一个脚本只是在没有下面列出的选项的情况下启动,图形将被显示。要将图形额外写入文件,必须使用 --output <FILE>(或简写 -o <FILE>)给出要生成的文件名。
如果脚本在批处理文件中运行,显示图形通常不方便(一旦知道它符合要求)。在这种情况下,可以使用选项 --blind (-b) 来抑制显示图形。
| 选项 | 描述 |
|---|---|
| -o <FILE> --output <FILE> |
定义保存图形的名称 |
| -b --blind |
如果设置,将不显示图形 |
其他可视化方法#
在 sumo-gui 中根据任意数据为边着色和缩放#
sumo-gui 可以加载 edgeData 文件 并使用其中任何属性的值为边(道路)着色以及修改边的视觉宽度。这服务于与 plot_net_dump.py 类似的用例,但允许使用 sumo-gui 的所有动态缩放和平移功能。
在逐步进行仿真时,可以显示权重文件中包含的不同时间间隔。将仿真步长调整为数据周期以方便步进可能很有用:
sumo-gui -n NET --edgedata-files FILE --step-length 3600 --end 24:0:0
之后,您需要进行以下设置:
- 选择 "edgeData" 进行着色:
- 选择数据类型并重新校准着色的间隔阈值:
- 设置颜色边图例(可选):
关于 "Recalibrate Rainbow",它是使用当前步骤中读取的数据完成的。因此,在单击 "Recalibrate Rainbow" 之前,可能需要运行一些步骤来获取数据。此外,如果使用另一个步骤的数据,结果可能会不同。或者,您可以 (1) 直接在 "Recalibrate Rainbow" 图标旁边设置最小值和最大值,或者 (2) 手动设置每个间隔的间隔阈值。
交叉口流量图#
要可视化交叉口的流量,其中线宽与交通量成正比,可以使用工具 route2poly.py。
- 使用 netedit 选择一个或多个交叉口的所有边,这些边的流量将被可视化,并将选择保存到文件(例如 sel.txt)
-
生成宽度与通过选定边的车辆数量成正比的多边形。当设置 --scale-width to 0.01 时,100 辆使用相同边序列的车辆将对应于 1m 的多边形宽度。选项 --spread 用于防止生成的多边形重叠,应根据多边形宽度进行调整。
route2poly.py NET routes.rou.xml -o flows.poly.xml --filter-output.file sel.txt --scale-width 0.01 --internal --spread 1 --hue cycle -
在 sumo-gui 中可视化流量
sumo-gui -n NET -a flows.poly.xml

将 FCD 数据可视化为移动的 POI#
工具 fcdReplay.py 可用于在 sumo-gui 中重放 fcd-output 文件。
使用示例:
python tools/fcdReplay.py -k example.sumocfg -f fcd.xml
要使用带有 lon/lat 值的 fcd 数据(使用 sumo 选项 --fcd-output.geo 生成),必须设置选项 --geo。
过时的#
这些工具的命名方式如下:<API>__<DESCRIPTION>.py,其中:
- <API>: mpl 表示 matplotlib
- : 处理的 SUMO 输出(主要是)
- <DESCRIPTION>: 工具的功能
mpl_dump_twoAgainst.py#
读取两个 dump 文件(强制选项 --dump1 <FILE> 和 --dump2 <FILE>,或简写 -1 <FILE> 和 -2 <FILE>)。提取由 --value 描述的值(默认值: speed)。绘制 dump2 的值与 dump1 的相应(相同间隔时间和边)值的关系图。
当 --show 设置时显示绘图,或者当 --output <FILE> 设置时将其保存到文件。
您可以使用 (--join) 额外绘制值的归一化和。否则,您可以尝试使用 --time-coloring 为读取的间隔分配不同的颜色。
您可以使用 --xticks <XMIN,XMAX,XSTEP,FONTSIZE> 和 --yticks <YMIN,YMAX,YSTEP,FONTSIZE> 格式化轴,并使用 --xlim <XMIN,XMAX> 和 --ylim <YMIN,YMAX> 设置它们的限制。可以使用 --size <WIDTH,HEIGHT> 设置图像的输出大小。
mpl_tripinfos_twoAgainst.py#
读取两个 tripinfos 文件(强制选项 --tripinfos1 <FILE> 和 --tripinfos2 <FILE>,或简写 -1 <FILE> 和 -2 <FILE>)。提取由 --value 描述的值(默认值: duration)。绘制 tripinfos2 的值与 tripinfos1 的相应(相同车辆)值的关系图。
当 --show 设置时显示绘图,或者当 --output <FILE> 设置时将其保存到文件。
您可以使用 --xticks <XMIN,XMAX,XSTEP,FONTSIZE> 和 --yticks <YMIN,YMAX,YSTEP,FONTSIZE> 格式化轴,并使用 --xlim <XMIN,XMAX> 和 --ylim <YMIN,YMAX> 设置它们的限制。可以使用 --size <WIDTH,HEIGHT> 设置图像的输出大小。
mpl_dump_timeline.py#
从通过 --dumps <DUMP>[,<DUMP>]* 定义的 dump 中读取由 --edges <EDGEID>[,<EDGEID>]* 定义的边的值(给定为 --value <VALUE>,默认速度)。使用通过 --colors <MPL_COLOR>[,<MPLCOLOR>]* 定义的颜色将它们绘制为时间线。请注意,颜色数量必须等于边数 * dump 数。
当 --show 设置时显示绘图,或者当 --output <FILENAME> 设置时将其保存到文件。
您可以使用 --xticks <XMIN,XMAX,XSTEP,FONTSIZE> 和 --yticks <YMIN,YMAX,YSTEP,FONTSIZE> 格式化轴,并使用 --xlim <XMIN,XMAX> 和 --ylim <YMIN,YMAX> 设置它们的限制。可以使用 --size <WIDTH,HEIGHT> 设置图像的输出大小。
mpl_dump_onNet.py#
读取一个网络(使用 --net-file <NET> 或 -n <NET> 定义)和一个边 dump 文件(--dump <DUMPFILE> 或 -d <DUMP_FILE>)。使用从 <NET> 读取的几何形状绘制网络。每条边使用的宽度和颜色都使用 --value <WIDTHVALUE>,<COLORVALUE> 确定,其中 <WIDTHVALUE> 和 <COLORVALUE> 都是 dump 文件中存在的、每条边都有的属性。
您可以通过设置 --color-map <DEFINITION> 来更改使用的颜色映射。<DEFINITION> 由排序的值列表(介于 0 和 1 之间)和分配的颜色组成。这意味着默认的 0:#ff0000,.5:#ffff00,1:#00ff00 让具有低 <COLORVALUE> 值的街道显示为红色,中间的显示为黄色,具有高值的显示为绿色。对于给定值之间的值,颜色使用线性插值确定。请注意,只能使用小写十六进制字符。
当 --show 设置时显示绘图,或者当 --output <FILENAME> 设置时将其保存到文件。
--join 将每条边找到的值相加,并将结果除以这些值的数量。如果未设置 join 并且给出了 --output,则应选择如下所示的输出名称:<NAME>'%05d.png。%05d 将被写入的当前时间步替换。
如果您通过不“连接”(聚合)数据生成了一组图像,可以使用 ImageMagick 和以下命令将获得的图片转换为动画 gif:
convert -delay 20 *.png -loop 0 animation.gif
(loop 0 表示动画在结束后从头开始重复)
您可以使用 --xticks <XMIN,XMAX,XSTEP,FONTSIZE> 和 --yticks <YMIN,YMAX,YSTEP,FONTSIZE> 格式化轴,并使用 --xlim <XMIN,XMAX> 和 --ylim <YMIN,YMAX> 设置它们的限制。可以使用 --size <WIDTH,HEIGHT> 设置图像的输出大小。







