【发布时间】:2016-09-06 15:34:53
【问题描述】:
我有一个 c++ 代码,每次生成一个可变数量的“.txt”文件。 我正在使用一个 bash 脚本来加载 txt 文件并将它们发送到 gnuplot 脚本。然后我必须在同一个图中绘制它们每个相同的 2 列(代表高度与时间图)。
我的问题是 x 坐标(txt 文件的第一列)并不总是以相同的值结束,当 x 坐标的最后一个值不为零时,我需要在 gnuplot 图中插入一个十字。你知道怎么做吗?
这就是我绘制多个文件的方式
plot for [object in objectnames] object.".txt" using 1:2 w l title object
其中 "objectnames" 是一个字符串,其中包含 BASH 发送的所有文件名
现在,为了绘制 CROSSES,我想到了两种方法:
将坐标数组发送到 gnuplot 脚本,然后设置一些标签,但 GNUPLOT 不喜欢数组,我无法以这种方式创建可变数量的标签。
另一种方法是读取 gnuplot 脚本中的 txt 文件,但我不知道该怎么做。
感谢您的帮助
编辑
BASH 脚本
export DATA_DIR=${1:-/home/../output}
export objectname
space=" "
OUT_FILES="$(find -L $DATA_DIR -name '*_Trajectory.txt')"
for file in $OUT_FILES; do
fig=$(basename "$file")
objectID=$(echo $fig| cut -d'_' -f 1)
# filenames concatenation
objectname=$objectname$objectID$space
done
export figNameAltitude="${file/${fig}/altitudePlot.png}"
gnuplot -e "folder='${DATA_DIR}';objectnames='${objectname}';figName='${figNameAltitude}';lineWidth='${linewidth}'" altitudePlot.gp
GNUPLOT SCRIPT(我避免插入所有关于标题、轴等的行)
plot for [object in objectnames] folder.'/'.object."_Trajectory.txt" using 1:2 w l lw lineWidth title object
【问题讨论】:
-
请提供一个最小的、完整的示例,包括数据和所有绘图命令。
-
我从 bash 和 gnuplot 脚本中插入了一些命令。我知道仅仅用写作来解释并不是一件容易的事。我的问题可以用一句话来概括:考虑到脚本必须尽可能通用这一事实,我如何在 gnuplot 中数据集的绘图末尾添加一个符号(例如十字)?
-
我将脚本格式化为代码;请检查我是否正确。
-
你想把那个十字架放在哪里(哪个坐标)?
-
谢谢彼得,没错。问题是我不知道先验坐标。我有这个可变数量的文件,如果每个文件的第一列不以零终止(作为最后一个值),我必须在坐标 x= 第一列的最后一个值和 y=第二个的最后一个值列。但这应该只在某些情况下发生。一切都应该尽可能地通用