我是gnuplot的新手。我有这样的csv文件:
category| date | value
a |2016-04-01 | 0,2
a |2016-04-02 | 0,31
a |2016-04-03 | 0,14
....
a |2016-04-11 | 0,4
b |2016-04-01 | 0,32
b |2016-04-02 | 0,31
....
b |2016-04-10 | 0,15
C |2016-04-01 | 0,15
C |2016-04-02 | 0,23
.....
And so on
如何在一个命令中为不同图表上的每个类别绘制数据?
例如,如果我有9个不同的类别,那么我有9个图表,其中x轴表示日期,y轴表示值。
答案 0 :(得分:1)
您可以使用plot
for循环多次绘制文件。每次,您只考虑第一列适合循环变量的x值(检查help ternary operator
):
set decimalsign ","
set xdata time
set format x "%Y-%M-%D"
plot for [cat in "a b c d"] datafile using ($1 eq cat ? $2 : NaN):3
如果两者之间存在无效点,则Gnuplot无法连接点(例如with linespoints
)。因此,您必须对该文件进行排序。
答案 1 :(得分:0)
我使用Perl重新格式化gnuplot的输入。
#! /bin/bash
input=$1
tmp=$(mktemp)
perl -aF'/\|/' \
-ne 'print "\n\n" if $last ne $F[0] && $. > 2;
$last = $F[0];
$F[-1] =~ s/,/./;
print "@F" if $. > 1;
' "$input" > "$tmp"
categories=($( cut -f1 -d\| "$input" | uniq ))
{
cat <<EOF
set term png;
set xdata time;
set timefmt '%Y-%m-%d';
plot '$tmp' index 0 using 2:3 with lines title "${categories[1]}" \\
EOF
i=1
while (( i < ${#categories[@]}-1 )) ; do
printf ', "" index %d using 2:3 with lines title "%s"' $i "${categories[++i]}"
done
} | gnuplot > "$input".png
rm "$tmp"